c++Template 类型提升class Promotion { public: typedef typename IfThenElse<(sizeof(T1)>sizeof(T2)), T1, typenameIfThenElse<(sizeof(T1)<sizeof(T2)), T2, void>::ResultT >::ResultTResultT; }; template<typename T> class Promotion<T,T> { public: typedef T ResultT; }; #define MK_PROMOTION(T1,T2,Tr)\ template<> class Promotion<T1, T2> {\ public:\ typedef Tr ResultT; \ }; \ \ template<> class Promotion<T2, T1> { \ public: \ typedef Tr ResultT; \ }; MK_PROMOTION(bool,char, int) MK_PROMOTION(bool,unsigned char, int) MK_PROMOTION(bool,signed char, int) template<typenameT1, typename T2> classPromotion<Array<T1>, Array<T2> > { public: typedef Array<typenamePromotion<T1,T2>::ResultT> ResultT; }; template<typenameT> classPromotion<Array<T>, Array<T> > { public: typedef Array<typenamePromotion<T,T>::ResultT> ResultT; }; |
|