私は現在、いくつかのコードをリファクタリングしており、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つの追加パラメーターは、クラスにtypedefを追加するだけなので、実行時の機能は実際には変更されません。バーの(現在は部分的に)特殊な実装を維持する方法はありますか?その構文を理解できないようで、それが不可能かもしれないという予感があります。
編集:私は次のようなものを探しています:
template <class EXTRA0, class EXTRA1>
void foo<SomeType, EXTRA0, Sometype, EXTRA1>::bar()
{
/* specialized implementation */
}
コンパイルされていないようです。