Можно ли перегружать шаблон класса? - PullRequest
0 голосов
/ 29 октября 2010

Я обнаружил, что шаблонный метод может быть перегружен, могу ли я сделать то же самое на шаблонных классах?Если 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;
}

1 Ответ

5 голосов
/ 29 октября 2010

Нет. Это не разрешено Вместо этого шаблон класса может быть специализированным (включая частичную специализацию). Это в значительной степени достигает эффекта перегрузки (которая только для функций)

Обратите внимание, что параметры шаблона не могут быть выведены из аргументов конструктора.

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
}
...