这是我的代码:
template<typename T1, typename T2> class MyClass
{
public:
template<int num> static int DoSomething();
};
template<typename T1, typename T2> template<int num> int MyClass<T1, T2>::DoSomething()
{
cout << "This is the common method" << endl;
cout << "sizeof(T1) = " << sizeof(T1) << endl;
cout << "sizeof(T2) = " << sizeof(T2) << endl;
return num;
}
效果很好。但是当我尝试添加这个时
template<typename T1, typename T2> template<> int MyClass<T1, T2>::DoSomething<0>()
{
cout << "This is ZERO!!!" << endl;
cout << "sizeof(T1) = " << sizeof(T1) << endl;
cout << "sizeof(T2) = " << sizeof(T2) << endl;
return num;
}
我收到编译器错误:
«>» 标记之前的显式专业化无效
«int MyClass::DoSomething()» 的模板 ID «DoSomething» 与任何模板声明不匹配
我使用 g++ 4.6.1
我应该怎么办?
不幸的是,如果不专门化外部模板,则无法专门化属于类模板成员的模板:
C++11 14.7.3/16:在类模板的成员或出现在命名空间范围中的成员模板的显式专业化声明中,成员模板及其某些封闭类模板可能保持非专业化,但如果类成员模板的封闭类模板也未显式特化,则声明不应显式特化该类成员模板.
我认为你最好的选择是将额外的参数添加到MyClass
,然后部分专门化它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)