クラス宣言内で部分的なテンプレートの特殊化を使用できます
template<class T1, class T2>
struct A
{
void foo() { cout << "general"; }
};
template<class T1>
struct A<T1, int>
{
void foo() { cout << "partial specialization"; }
};
しかし、私がクラス宣言の外でそれをやろうとしているとき
template<class T1, class T2>
struct A
{
void foo();
};
template<class T1, class T2>
void A<T1, T2>::foo() { cout << "general"; }
template<class T1>
void A<T1, int>::foo() { cout << "partial specialization"; }
次のエラーが発生します。
不完全な型の無効な使用«structA<T1、int>»
すべてのメンバーを再定義する場合は最初のアプローチを使用することは問題ありませんが、他のすべてのコードを重複させずに1つのメソッドのみを再定義する場合はどうでしょうか。
それで、クラス定義の外で部分的なテンプレートの特殊化を使用することは可能ですか?