模板专业化:我们可以部分实现特殊情况

时间:2013-05-31 20:03:07

标签: c++ templates

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

1 个答案:

答案 0 :(得分:6)

没有必要为全班提供专业化。您可以专门化该特定成员函数:

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

现场演示here