分享

c++ Template 类型提升

 quasiceo 2012-11-12

c++Template 类型提升


template<typename T1, typename T2>
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;
};

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多