C++ type_traits 原理

一、简单介绍

(1)、type_traits 类型萃取,C++11中已经成为了一个核心模块。

(2)、标准库包括helper classestype traitstype transformations 三个模块。

                                                                                                                                                                                                                     

(3)、type_traits是编译期就去确定具体的类型,从而根据不同的类型来执行不同的模块,消除重复,提高代码质量。

 

二、实现

   C++标准库中的type_traits使用方式这里不再介绍,我也在学习中,我这里根据自己的理解,来记录下type_traits的实现方式。

核心:模板

(1)、理解模板template的用法。

(2)、理解模板template特化(全特化和偏特化)。

 

简单实现C++标准库的is_unsigned

 1 template <typename T>
 2 struct isUnsigned
 3 {
 4     static const bool value = false;
 5 };

首先是一个支持所有类型模板isUnsigned, isUnsigned(unsigned)::value 毫无疑问是flase;

那如何使isUnsigned(unsigned)::valuetrue呢,那就需要增加一个unsigned的特化版本的isUnsigned

template <>
struct isUnsigned<unsigned>
{
    static const bool value = true;
};

此时,编译器在编译期间执行isUnsigned(unsigned)::value则会定位到此特化版本的模板类型。

测试代码

1 int main()
2 {
3     cout << isUnsigned<int>::value << endl;
4     cout << isUnsigned<float>::value << endl;
5     cout << isUnsigned<bool>::value << endl;
6     cout << isUnsigned<unsigned>::value << endl;
7 
8     return 0;
9 }

测试结果     

   

 

转载于:https://www.cnblogs.com/Forever-Kenlen-Ja/p/7074228.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值