如果我有一个这样的模板类和模板函数
template <class T> T getMax (T a, T b) {
return (a>b?a:b);
}
template <class T> class GetMax {
public:
static T getMax(T a, T b) {
return (a>b?a:b);
}
};
为什么这些无效?
x=getMax(1, '2');
但是这些是有效的
x=getMax(1,2);
这是否意味着模板函数中没有类型转换?
这是无效的
x=GetMax::getMax(1, 2);
这是否意味着必须为模板类指定类型?
最佳答案
getMax(1, '2');
应该返回什么?一个整数还是一个字符?考虑一下:)
您可以这样写:
template <class T1, class T2> T1 getMax (T1 a, T2 b) {
return (a>b?a:b);
}
但是请注意,您显式地返回类型1,在
getMax('1',1000)
这样的情况下,该值可能不起作用,因为100会被转换为char类型,并且大小还不够。后者无效,因为要使用一个类,您必须首先声明它是什么类型-这种机制在类型推导之前首先起作用。
如果您声明,它将起作用:
class GetMax {
public:
template <class T>
static T getMax(T a, T b) {
return (a>b?a:b);
}
};