函数模板无法编译

Function template won't compile

本文关键字:编译 函数模板      更新时间:2023-10-16

我只是在学习函数模板,下面创建的模板没有编译,我不确定出了什么问题。我正试图在模板中放入一个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;
    }
  1. 如果要支持不同的类型,则需要使用不同的模板参数来定义模板。

    template <typename Lhs, typename Rhs>
    typename std::common_type<Lhs, Rhs>::type max(const Lhs &lhs, const Rhs &rhs) {
      return lhs > rhs ? lhs : rhs;
    }
    

    通过这种方式,你可以传递不同的类型,你会得到它们之间的常见类型

  2. 如果只想在函数中处理相等的类型,可以保持模板原样。

    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);

或者,您可以将模板定义为采用Temp1Temp2类型。