我想制作灵活的泛型函数,它的返回可以处理多种未知类型。
#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;
}
答案 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的评论)