定义模板方法特化的正确语法是什么

时间:2014-03-16 17:10:36

标签: c++ templates syntax template-specialization

假设我用模板方法声明了一个类。

class MyClass {
    ...
    template<typename T> void myMethod(const T& obj);
}

我定义了方法的通用版本

template<typename T>
void MyClass::myMethod(const T& obj) { .... }

并希望为各种类型定义几个特化。什么是正确的语法? VS2013编译器似乎没有批准我的尝试。

template<>
void MyClass::myMethod<int>(const int &) {....}

or

template<int>
void MyClass::myMethod(const int &) { .... }

1 个答案:

答案 0 :(得分:0)

第一种语法没问题,作为专业化。第二个是错误的,因为它定义template<int>myMethod被声明为template<typename>。但请记住,根本不需要专门化,过载就好了,比如

class MyClass {
   void myMethod(const int& obj) { ... }
   // ... more overloads
};

当然,如果您需要将声明与定义分开(我避免使用模板),这会导致更多的代码重复。根据类型,您也可以通过值强制执行调用,例如

void myMethod(bool obj) { ... }

不适用于您的专业。