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 回答