#include <iostream> using namespace std;
// 定义返回值类型类,通过对它的偏特化来确定返回值 template<typename _tp1, typename _tp2> struct _return_type { typedef double value_type; };
template<typename _tp1> struct _return_type<_tp1, long double> { typedef long double value_type; };
template<typename _tp2> struct _return_type<long double, _tp2> { typedef long double value_type; };
template<> struct _return_type<int, int> { typedef int value_type; };
template<> struct _return_type<int, float> { typedef float value_type; };
template<> struct _return_type<float, int> { typedef float value_type; };
template<> struct _return_type<float, float> { typedef float value_type; };
// 一个求最大值的函数,以前只能针对同一类型的变量。 // 原因是当有两个不同类型的变量时不能确定以哪个类型 // 作为返回值。现在通过模板技巧可以轻易地得到返回值 // 类型。 template<typename _tp1, typename _tp2> inline typename _return_type<_tp1,_tp2>::value_type max(const _tp1& __a, const _tp2& __b) { return __a>__b ? __a:__b; }
void main() { max(3, 4.5); }
|