我发现模板方法可能被重载,我可以在模板类上做同样的事情吗?如果两个模板类匹配一个模板类实例化,我们可以使用构造函数中的参数类型来推断要使用哪个模板类。
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; }
不,这是不允许的。相反,类模板可以专门化(包括部分专门化)。这在很大程度上实现了重载的效果(仅用于函数)
请注意,不能从构造函数参数推导模板参数。
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 }