请参阅以下代码。第一个MyClass<>有两个函数(func1和func2)。然后我想在func1中为MyClass做一些特殊的事情,但不是func2。看起来我必须再次为func2键入代码。我想知道是否有办法解决这个问题?感谢
#include <iostream>
using namespace std;
template <class T>
class MyClass {
public:
void func1(){
cout<<"default: func1"<<endl;
}
void func2(){
cout<<"default: func2"<<endl;
}
private:
T haha;
};
template <>
class MyClass<double> {
public:
void func1(){
cout<<"special: func1"<<endl;
}
};
int main()
{
MyClass<int> intclass;
intclass.func1();
intclass.func2();
MyClass<double> doubleclass;
doubleclass.func1();
doubleclass.func2(); // error 'class MyClass<double>' has no member named 'func2'
return 0;
}
答案 0 :(得分:6)
没有必要为全班提供专业化。您可以专门化该特定成员函数:
template <>
void MyClass<double>::func1() {
cout<<"special: func1"<<endl;
}
现场演示here。