强制模板函数将整数视为双精度,或精度更高的类型

时间:2016-06-27 20:15:02

标签: c++ templates c++11 casting dynamic-cast

这个问题可能很愚蠢,具体取决于你如何看待它。

出于好奇,我想实现一个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作为第一个参数的事实将是一种解决问题的天真方式!

0 个答案:

没有答案