3

请参阅以下代码。第一个 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;
}
4

1 回答 1

6

无需为整个班级提供专业化。您可以专门化该特定成员函数:

template <>
void MyClass<double>::func1() {
    cout<<"special: func1"<<endl;
}

现场演示在这里

于 2013-05-31T20:06:02.287 回答