我可以在类声明中使用部分模板特化
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"; }
我收到以下错误:
不完整类型 «struct A < T1, int >» 的无效使用
当您想重新定义所有成员时,使用第一种方法不是问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?
那么,是否可以在类定义之外使用部分模板特化?