traits 扮演的是“特性萃取机”的角色
迭代器所指向的对象的型别称为该迭代器的value type,虽然可以通过template来推导参数型别,但是若value type要用于函数的返回值,就没有办法了
用于获取各个迭代器的特性比如迭代器的value_type,difference_type等,因此迭代器应该提供标准接口,体现在iterator.h处,将在迭代器笔记处补全含义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
特偏化partial specialization
含义:提供另一份template定义式,本身仍为templatized,即针对参数更进一步的条件限制设计的特化版本
//允许接受任何型别
template<typename T>
class C{...}
//接受T为原生指针
template<typename T>
class C<T*>{...}
//利用上述特性得到value type
//含义为,如果T有定义自己的value type,那么通过traits得到value type。
template<class T>
struct iterator_traits{
using value_type = typename T::value_type;
};
//迭代器是个原生指针
template<class T>
struct iterator_traits<T*>{
using value_type = T;
};
__type_trait__type_traits
__iterator_trait负责萃取迭代器的特性,__type_trait负责萃取型别type的特性。
比如:是否具备non-trivial defalt ctor?non-trivial copy ctor…?
如果否定,则在进行某些操作,如构造,析构,拷贝等可以直接采用内存操作,如malloc,memcpy,而不用调用constructor,destructor等,可以提高效率(在第二章中的内存分配有所体现)
integral_constant
integral_constant 是模板元编程的一个重要的类, 它的作用是定义类型的常量.
它定义了 bool_constant, true_type 和 false_type.
实现代码: