是否可以重载模板类?

Tho*_*son 0 c++ templates overloading specialization

我发现模板方法可能会重载,我可以在模板类上做同样的事情吗?如果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;
}
Run Code Online (Sandbox Code Playgroud)

Chu*_*dad 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
}
Run Code Online (Sandbox Code Playgroud)