我创建了一个带有模板化方法的普通类,并且所有方法实例都是显式和内联的。
像
class MyClass
{
template<int N> inline void MyMethod();
template<> inline void MyMethod<1>() { cout << 1; }
template<> inline void MyMethod<2>() { cout << 2; }
};
我需要使用template<>
语法来编译它。我尝试了其他解决方案,例如类声明之外的方法的显式定义,语法变体,无济于事。 (这是在VS2008下制作的,未在以后的版本中尝试过。)
我有两个问题:
答案 0 :(得分:2)
你写它的方式是错误的,它不会起作用 成员方法专业化必须从您的班级中删除:
class MyClass
{
template<int N> void MyMethod();
};
template<> void MyClass::MyMethod<1>() { }
template<> void MyClass::MyMethod<2>() { }
它是便携的,如果它有意义,主要取决于你的实际问题,很难说你的例子。
答案 1 :(得分:1)
您无法在类体中完全专门化成员模板。但是允许部分专业化。必须在类体外声明/定义完全特化(如果未声明cpp
,则定义应放在inline
文件中。
供参考,这是question。