C++学习33:Type traits

之前讲过traits,表示萃取机的意思。同迭代器一样,用typedef的形式回答算法对类型的提问。

1 旧版本源码

在这里插入图片描述has_trivial_default_constructor:默认构造函数是不是不重要;
has_trivial_copy_constructor:拷贝构造函数是不是不重要;
has_trivial_assignment_operator:拷贝赋值函数是不是不重要;
has_trivial_destructor:析构函数是不是不重要。
POD表示很旧的很普遍的那种格式,如只有数据没有函数的struct。
其中type traits的默认回答都是__false_type,即不是不重要,也就是说都很重要。
但如果有的类型的这些回答并不是“很重要”,这里可以给出范围偏特化版本告知“这个类型的某几个并不重要”。如下例:
在这里插入图片描述

2 新版本type traits样例和测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 实现

3.1 is_void

先拿掉令人困惑的,对主体没影响的,如const、volatile,移除这两个关键字的函数即remove_cv。实现方式都是一个泛化,一个偏特化,其中特化版本就起到了去掉const和volatile的功能。
在这里插入图片描述
调用is_void时,进入helper函数,若是void偏特化版本,返回真,否则为假。

3.2 is_integral

同上,通过偏特化的方式看类型是否是整形。
在这里插入图片描述

3.3 is_class、is_union、is enum、is_pod

在这里插入图片描述
代码中未出现,而编译器有这个能力回答,故应该是在编译的时候进行回答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值