No Matching函数使用const参数调用模板化函数

use*_*542 4 c++ gcc

我有一个定义如下的函数:

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但它似乎没有解决问题.任何帮助,将不胜感激.

Bo *_*son 8

这不是有关const,但关于T不能同时doublefloat在同一时间.

如果您具有非模板函数,则可以将一个或多个参数提升(或转换)为参数类型.使用模板函数,编译器必须首先确定模板类型应该是什么.在这里无法决定.

  • @leemes:或者,避免类型推导并调用特定的特化:`doSomething <double>(12.0,23.0f,2.0f)`这将使得参数的推广方式与非模板相同(即问题)促销/不促销是类型扣除失败,而不是它是一个模板) (4认同)

Ole*_*rev 6

您的函数定义对三个参数中的每一个使用相同的类型"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));