如何实现泛型最大函数?

cpp*_*der 4 c++ templates

我知道这是因为模板函数的返回类型与第一个参数(T)的返回类型相同.
如何修改此模板,使其在所有情况下都能正常运行?

#include <iostream>
using namespace std;
template <typename T, typename U>
T max(T x, U y)
{
    return x>y ? x : y;
}

int main()
{
    cout<<max(17.9,17)<<"\n";
    cout<<max(17,17.9)<<"\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

17.9  
17
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 10

您的实现行为是正确的,但您可能不需要该输出.代码中返回类型的问题.

如果可以使用C++ 11,则可能需要使用trailing-return类型:

template <typename T, typename U>
auto max(T x, U y) -> decltype(x>y ? x : y)    //C++11 only
{
    return x>y ? x : y;
}
Run Code Online (Sandbox Code Playgroud)

哪个会给出这个输出:

17.9
17.9
Run Code Online (Sandbox Code Playgroud)

我希望这是理想的输出.

在线演示:http://ideone.com/2Sh5Y