显式类成员实例化

时间:2016-10-01 07:26:46

标签: c++ visual-c++

我创建了一个带有模板化方法的普通类,并且所有方法实例都是显式和内联的。

class MyClass
{
    template<int N> inline void MyMethod();
    template<> inline void MyMethod<1>() { cout << 1; }
    template<> inline void MyMethod<2>() { cout << 2; }
};

我需要使用template<>语法来编译它。我尝试了其他解决方案,例如类声明之外的方法的显式定义,语法变体,无济于事。 (这是在VS2008下制作的,未在以后的版本中尝试过。)

我有两个问题:

  • 这是便携式吗?
  • 有意义吗?

2 个答案:

答案 0 :(得分:2)

你写它的方式是错误的,它不会起作用 成员方法专业化必须从您的班级中删除:

class MyClass
{
    template<int N> void MyMethod();
};

template<> void MyClass::MyMethod<1>() {  }
template<> void MyClass::MyMethod<2>() { }

它是便携的,如果它有意义,主要取决于你的实际问题,很难说你的例子。

答案 1 :(得分:1)

您无法在类体中完全专门化成员模板。但是允许部分专业化。必须在类体外声明/定义完全特化(如果未声明cpp,则定义应放在inline文件中。

供参考,这是question