traits

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.
实现代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值