关闭

Type Traits

126人阅读 评论(0) 收藏 举报
分类:

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25014次
    • 积分:618
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:63篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论