我只是在学习函数模板,我在下面创建的模板无法编译,我不确定是什么问题。我试图使一个int变量和一个双变量进入模板但我在调用函数时不断收到错误。错误是:
错误:没有匹配函数来调用'LargestFunction(int&,double&)'|
,代码如下:
template <class Temp>
Temp LargestFunction(Temp a, Temp b){
if(a > b){
return a;
}
else
return b;
}
int main()
{
int NumOne = 30;
double NumTwo = 52.252;
cout << LargestFunction(NumOne,NumTwo);
return 0;
}
答案 0 :(得分:2)
编译器不知道它应该推断出哪种类型。它应该是int
还是double
?在您的模板中,Temp
指的是单一类型。您可以通过以下方式指定它:
LargestFunction<double>(NumOne,NumTwo);
或者您可以定义模板以采用Temp1
和Temp2
类型。
答案 1 :(得分:2)
如果要支持不同类型,则需要使用不同的模板参数定义模板。
template <typename Lhs, typename Rhs>
typename std::common_type<Lhs, Rhs>::type max(const Lhs &lhs, const Rhs &rhs) {
return lhs > rhs ? lhs : rhs;
}
通过这种方式,你可以传递不同的类型,你可以得到它们之间的常见类型。
如果您只想在函数中处理相同的类型,可以按原样保留模板。
template <typename T>
T max(const T &lhs, const T &rhs) {
return lhs > rhs ? lhs : rhs;
}
然后,您需要投射其中一个参数,以便您拥有相同的类型。
max(static_cast<double>(101), 4.2);
或者,您也可以明确地专门化功能模板,但一般不鼓励这样做。
max<double>(101, 4.2);