假设我用模板方法声明了一个类。
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 &) { .... }
答案 0 :(得分:0)
第一种语法没问题,作为专业化。第二个是错误的,因为它定义template<int>
而myMethod
被声明为template<typename>
。但请记住,根本不需要专门化,过载就好了,比如
class MyClass {
void myMethod(const int& obj) { ... }
// ... more overloads
};
当然,如果您需要将声明与定义分开(我避免使用模板),这会导致更多的代码重复。根据类型,您也可以通过值强制执行调用,例如
void myMethod(bool obj) { ... }
不适用于您的专业。