C ++泛型函数的灵活性

时间:2015-09-21 18:23:30

标签: c++ templates

我想制作灵活的泛型函数,它的返回可以处理多种未知类型。

#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;
}

2 个答案:

答案 0 :(得分:6)

您可以使用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;
}

答案 1 :(得分:2)

您还必须确定返回类型。

也许:

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

您可以使用支持运算符的任意两个类(类型)&lt;和+。

注意:如果您可以应用运算符'a&lt;,则假定算术表达式'a + b'有效。 B”。 (请注意@Barry的评论)