3

次のコードを参照してください。最初の MyClass<> には 2 つの関数 (func1 と func2) があります。次に、func2 ではなく func1 の MyClass に対して特別なことをしたいと思います。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 に答える