c++泛型函数的灵活性

C++ generic functions flexibility

本文关键字:灵活性 函数 泛型 c++      更新时间:2023-10-16

我想创建一个灵活的泛型函数,它的返回值可以处理多种未知类型。

#include <iostream>
template<typename U, typename V>
U Max(U arg1, V arg2) {
    return arg1 > arg2 ? arg1 : arg2;
}
using namespace std;
int main()
{
    double x = 9.88;
    int  n = 8;
    cout << Max(x, n) << endl; // output is 9.88
    int z = 4;
    double r = 5.88;
    // output is 5 not 5.88, I want to code one function deal with all types.
    cout << Max(z, r) << endl; 
    return 0;
}

您可以使用std::common_type

template<typename U,typename V>
typename std::common_type<U, V>::type 
Max(U arg1, V arg2){
    return arg1 > arg2 ? arg1 : arg2;
}

还必须确定返回类型。

也许

:

template<typename U, typename V>
auto Max(U arg1, V arg2) -> decltype(arg1 + arg2)
{
    return arg1 > arg2 ? arg1 : arg2;
}

可以使用任意一对支持<和+。>

注意:这里假设算术表达式'a + b'是有效的,如果你可以应用运算符'a <b"。(请注意@Barry的评论)>