2

テンプレートを複数回定義せずに、テンプレートクラスの複数の機能を実装できるかどうか疑問に思っています。

宣言:

template <class T>
class Test{
    private:
    T field;
    public:
    Test(T value);
    T& get();
    void set(T value);
};

実装:

template <class T> Test<T>::Test(T value){ set(value); }
template <class T> T& Test<T>::get(){ return field; }
template <class T> void Test<T>::set(T value){ field = value; }

複数回コピーtemplate <class T>すると、エラーが発生しやすくなります。私はこのようなことができるかどうか疑問に思います:

template <class T>{
Test<T>::Test(T value){ set(value); }
T& Test<T>::get(){ return field; }
void Test<T>::set(T value){ field = value; }
}

どんな助けでも大歓迎です。

4

2 に答える 2

3

クラスから分離しない場合は、template<class T>毎回指定する必要はありません。

于 2013-02-03T07:40:34.167 に答える
2

クラス定義でこれらのメソッドを直接実装できます。

さらに、テンプレート クラスの宣言と実装を分離する必要はありません。コンパイルに副作用はありません。実装は実際の実装ではないためです。テンプレート クラスはクラスではなく、クラスを作成するために使用できる単なるテンプレートです。このようなテンプレート クラス (例: YourTemplate ) をインスタンス化すると、コンパイラはその新しいクラスを作成します。それを作成するには、すべてのテンプレート化されたメンバー関数を確認する必要があります (テンプレートを使用して、YourTemplate::function1()などの実際のメンバー関数を作成できるようにするため)。したがって、これらのテンプレート化されたメンバー関数はヘッダー ファイルに存在する必要があります。 、テンプレート クラス本体と共に。

于 2013-02-03T07:47:33.470 に答える