这个问题可能很愚蠢,具体取决于你如何看待它。
出于好奇,我想实现一个get_max
函数,它可以返回最多两个相似或不同的类型。我知道std已经有了这个但是:
template <class T, class U>
T get_max(T lh, U rh) {
if(lh >= rh) return lh;
else return rh;
}
主要地方:
int a = 10;
double d = 20.01;
std::cout << "a=" << a << "\nd=" << d << "\nget_max=" <<
get_max(a,d) << std::endl;
结果让我感到惊讶:
a=10
d=20.01
get_max=20
我希望get_max
输出20.01,但它输出了一个int。我可以理解,因为第一个参数是int
,然后函数中的T
返回T
,在这种情况下显然是int
所以函数返回两个参数中较大的一个,但将其转换为第一个参数的类型。
有没有办法以某种方式使代码变得聪明以返回double
或更高精度的类型?
我知道传递double
作为第一个参数的事实将是一种解决问题的天真方式!