私は現在、いくつかのコードをリファクタリングしています.2つのテンプレートパラメータを持つクラステンプレートのメンバ関数を明示的に特化しています。 部分的に特化したメンバ関数の実装
template <class S, class T>
class Foo
{
void bar();
};
template <class S, class T>
void Foo<S, T>::bar()
{ /* Generic stuff */ }
template <>
void Foo<SomeType, SomeType>::bar()
{ /* Some special function */ }
は今、私はいくつかのより多くのテンプレートパラメータを追加し、そのクラスには次のようになります。
template <class S, class EXTRA0, class T, class EXTRA1>
class Foo
{
void bar();
};
ランタイム機能はないので、これら2つの追加のパラメータはちょうど、私のクラスに型定義を追加本当に変わる。私は棒の(今は部分的に)特殊化された実装を保つことができる方法はありますか?私はそれの構文を理解しているように見えることはできませんし、私はそれが可能ではないかもしれない愚直さがあります。
編集:は私のようなものを探しています:コンパイルしていないよう
template <class EXTRA0, class EXTRA1>
void foo<SomeType, EXTRA0, Sometype, EXTRA1>::bar()
{
/* specialized implementation */
}
..あなたが正しい
私の知る限りでは、あなたが右に覚えている:あなたは、部分的に機能し、型のみを専門とすることはできません。 – Simone
@Simoneそれは少なくともg ++で動作しています。 – UmmaGumma
私の4.5.0バージョンの@Ashotはコンパイルされません。http://codepad.org/q6CVktqyを参照してください。 – Simone