0

テンプレートメソッドがオーバーロードされる可能性があることがわかりました。テンプレートクラスでも同じことができますか?2つのテンプレートクラスがテンプレートクラスのインスタンス化と一致する場合、コンストラクターでパラメータータイプを使用して、どちらを使用するかを推測できます。

template <typename T>
class A{
  A(T){}
};

template <typename T>
class A{
  A(T*){}
};

int main(){
  A<int*> a((int*)0);
  A<int> a((int*)0);
  return 0;
}
4

1 に答える 1

5

いいえ。これは許可されていません。代わりに、クラステンプレートを特殊化することができます(部分的な特殊化を含む)。これにより、オーバーロードの効果がほぼ達成されます(これは関数専用です)

テンプレートパラメータはコンストラクタの引数から推測できないことに注意してください。

template<class T> struct X{
   void f(){}
};

template<class T> struct X<T*>{
   void f(){}
};

int main(){
   X<int> x;
   x.f();          // calls X<T>::f

   X<int *> xs;
   xs.f();         // calls X<T*>::f
}
于 2010-10-29T03:12:16.460 に答える