我有一个定义如下的函数:
template < class T> T doSomething(const T value, const T value2, const T value3)
{
T temp = value;
//Do stuff
return temp ;
}
Run Code Online (Sandbox Code Playgroud)
在我的主要内容中,我将其称为如下:
doSomething(12.0, 23.0f, 2.0f);
Run Code Online (Sandbox Code Playgroud)
我收到错误,说没有匹配的呼叫功能doSomething(double, float, float).
我试图使用const_cast但它似乎没有解决问题.任何帮助,将不胜感激.
这不是有关const,但关于T不能同时double并float在同一时间.
如果您具有非模板函数,则可以将一个或多个参数提升(或转换)为参数类型.使用模板函数,编译器必须首先确定模板类型应该是什么.在这里无法决定.
您的函数定义对三个参数中的每一个使用相同的类型"T".在这种情况下,C++无法扣除类型.
请选择修复方法:
template<typename A, typename B, typename C>
A doSomething(const A& value, const B& value2, const C& value3)
{
A temp = value;
//Do stuff
return temp ;
}
doSomething<int>(12.0, 23.0f, 2.0f);
doSomething(12.0, static_cast<double>(23.0f), static_cast<double>(2.0f));