函数模板无法编译
Function template won't compile
我只是在学习函数模板,下面创建的模板没有编译,我不确定出了什么问题。我正试图在模板中放入一个int变量和一个double变量,但在调用该函数时,我一直遇到错误。错误为:
错误:调用"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;
}
-
如果要支持不同的类型,则需要使用不同的模板参数来定义模板。
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);
编译器不知道应该推断出哪种类型。应该是int
还是double
?在您的模板中,Temp
指的是单个类型。您可以通过调用指定:
LargestFunction<double>(NumOne,NumTwo);
或者,您可以将模板定义为采用Temp1
和Temp2
类型。
相关文章:
- 两阶段函数模板编译:第二阶段不是只使用*ADL吗
- 无法编译包含"if constexpr"的函数模板实例化
- variadic函数模板:基于n编译时值在运行时间自动n输入
- 精神语法不会编译:函数模板参数错误?
- 成员函数模板不会在 clang 上编译,但在 GCC 上编译
- 编译类模板成员函数时出错
- 实例化函数模板的编译问题
- 函数模板无法编译
- 使用额外的模板参数编译函数
- 为什么C++函数模板代码无法编译
- 函数模板参数编译错误
- 如何根据模板中的类型编译函数
- 关于函数模板的相同代码块在g++下编译正常,但在VC6下编译错误,原因是什么
- 最Vexing的朋友?朋友化一个专门的免费函数模板会引发编译错误(当重载一个方法时)
- 跨编译单元的相同函数模板实例化的地址
- 编译普通/模板函数的区别,c++
- 函数模板编译错误
- 通过模板化的函函数特化成员函数模板无法编译
- 编译函数模板时出现"expected nested-name-specifier"错误
- 用C++编译函数模板时出错