Type Traits

编译期根据型别作判断的泛型技术

template <typename T >

class TypeTraits

{

private :

template <class U> struct PointerTraits

{

enum{result = false};

typedef NullType PointeeType;

}

template <class U> struct PointerTraits<U *>

{

enum {

result =true;

typedef U PointeeType;

}

public:

enum{isPointer = PointerTraits<T>::result};

typedef PointerTraits<T>::PointeeType PointeeType;

}

}
如下std::vector::iterator实做内容

int main()

{

const bool

iterIsPtr = TypeTraits<vector<int>::itorator>::isPointer;

cout <<"vector<int>::iterator is"<<iterIsPtr?"fast":"smart"<<'\n'

}

侦测Pointers to members

template <typename T>

class TypeTraits

{

private:

template<class U>struct PToMraits

{

enum {result=false;}

}

template<class U ,class V>

struct PToMTraits<U V::*>

{

enum{result = true};

}

public :

enum{

isMemberPointer = PToMTraits<T>::result};

}

}

侦测基本型别方法 

IndexOf

优化参数型别 

referencedType 和 isPrimitive

卸除饰词const与Volatile

template <typename T>

class TypeTraits

{

private:

template<class U>struct UnConst

{

typedef U Result;

}

template <class U >struct UnConst<const U>

{

typedef U result;

}

public :

typedef UnConst<T>::Result NonConstType;

}

总结:基本结合了C++ 与 template ,通过Int2Type<>方式,实现了如上许多的功能,其主要作用在编译期实现功能,语法难度更深层次。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值