是否可以重载模板类?

时间:2010-10-29 03:06:57

标签: 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;
}

1 个答案:

答案 0 :(得分: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
}