2

カスタム オブジェクトを取り込むテンプレート クラスを作成しています。ちょっとこんな感じです。

template<typename T1,typename T2>
class myClass
{
public:
    myClass(const T1 &param1, const T2 &param2);
}



template<typename T1, typename T2>
myClass<T1,T2>::
myClass
(const T1 &param1, const T2 &param2)
{
    T1.customFunction(); //doesn't compile
}

したがって、このテンプレート クラスが使用されるときはいつでも、それを使用する人が、クラス T1 に customFunction() という関数があることを確認する責任があることを期待しています。問題は、customFunction が定数パラメーター (param1) で呼び出されるため、コンパイル時に const であることが保証されなければならないことですが、T1 が本質的にダミー クラスである場合、これはどのように可能でしょうか?

4

2 に答える 2

1

まず、そうあるべきです

param1.customFunction();

タイプではなく、パラメータオブジェクトで呼び出すためです。

第二に、心配する必要はありません。オブジェクトを構築するときはいつでもmyClass、コンパイラは、渡されたパラメーターがメンバー関数が存在し、呼び出し可能な型であることを確認します。

于 2012-06-09T10:09:12.577 に答える
0

少しずれています。関数は「constコンパイル時」である必要はありませんが、渡される型はわかっている必要があります。コンパイルされない理由は、型のインスタンスではなくcustomFunction型を呼び出そうとしているためです。T1

template<typename T1, typename T2>
myClass<T1,T2>::
myClass
(const T1 &param1, const T2 &param2)
{
      param1.customFunction(); //does compile
};
于 2012-06-09T10:08:12.697 に答える