Type Traits

来源:互联网 发布:软件下载网站排行 编辑:程序博客网 时间:2024/05/28 15:58

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

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
原创粉丝点击