Type Traits

原创 2017年01月02日 21:41:02

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

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<>方式,实现了如上许多的功能,其主要作用在编译期实现功能,语法难度更深层次。



版权声明:本文为博主原创文章,未经博主允许不得转载。

【C++泛型编程】编译期型别判断(Type Traits)

1.编译期型别判断(Type Traits)         编译期型别判断犹如在执行期根据数值进行判断,那么型别判断在什么情况下使用呢? 举个例子:假设你想写个copying 算法: temp...

类模板以及其中的traits技术和type classification技术

1. 类模板相关概念 类模板用来描述一系列具有相同行为的类。一般有如下的形式: template class A { public: A(){ cout...

boost源码剖析之:泛型编程精灵type_traits(rev#2)

boost源码剖析之:泛型编程精灵type_traits(rev#2)   刘未鹏 C++的罗浮宫(http://blog.csdn.net/pongba)   动机 使用traits的动...

【STL源码剖析】__type_traits技法

上篇介绍了__iterator_traits编程技法,SGI 将这种技法进一步扩大到迭代器以外,于是有了所谓的__type_traits。 iterator_traits负责萃取迭代器的特性...
  • Jammg
  • Jammg
  • 2016年06月04日 14:53
  • 439

c++11 之type_traits

1.type_traits-类型萃取  (1)type_traits可以在一定程度上消除 switch-case 或者 if-else语句,降低程序的复杂度 (2)可以在编译期就检查出是否是正确类型 ...

__type_traits详解

在STL中为了提供通用的操作而又不损失效率,我们用到了一种特殊的技巧,叫traits编程技巧。具体的来说,traits就是 通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性,...

Traits编程技法之type_trait

STL对于性能的要求非常的严格,任何一点无意义的操作都会严重影响其中容器或算法的性能,即使只是一条语句。在高频率的使用下,这种浪费将会无限扩大。type_traits的作用之一就是提高性能。 当我们在...

【c++11】static_assert: 静态断言 type traits:类型特征

static_assert提供一个编译时的断言检查 1、static_assert与assert的不同:     assert(表达式):运行时断言,表达式为false,在运行时打印固定的错误信息...

c++:数据类型的判断type_traits

//判断左值右值引用 void main() { int i(10);//i是左值 有内存实体 int &ri(i); int &&rri(i + 5);//右值引用 cout ::valu...

C++模板中type_traits(类型特化)

C++模板中type_traits(类型特化)   2009-10-12 17:13:47|  分类: C++(VC)编程|字号 订阅 C++模板中type_trait...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Type Traits
举报原因:
原因补充:

(最多只允许输入30个字)