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