Compare diff type values

闲来无聊,迷上了meta programming 小例子:

#include <iostream>

using namespace std;

template<typename T1, typename T2>
struct IsBigger
{
	static const bool bigger = sizeof(T1) > sizeof(T2);
};

template<typename T1, typename T2, bool bigger>
struct ReturnType
{
};

template<typename T1, typename T2>
struct ReturnType<T1, T2, true>
{
	typedef typename T1 valType;
};

template<typename T1, typename T2>
struct ReturnType<T1, T2, false>
{
	typedef typename T2 valType;
};

template<typename T1, typename T2>
typename ReturnType<typename T1, typename T2, IsBigger<T1, T2>::bigger>::valType Max(const T1& t1, const T2& t2)
{
	typedef typename ReturnType<T1, T2, IsBigger<T1, T2>::bigger>::valType value;
	value tmp1 = (value)(t1);
	value tmp2 = (value)(t2);
	return t1 > t2 ? t1 : t2;
}

 

 

 

posted on 2014-04-01 21:16  Tongxuan  阅读(157)  评论(0)    收藏  举报