STL源码-iterator traits编程技法

typedef typename iterator_traits::value_type  value _type;      我们可能对typedef很了解,即定义一个别名,其形式是:typedef+原类型名+新类型名;因此,我们可以知道typename iterator_traits::value_type是类型名;但是感到困惑的是这里为什么要使用typename关键字? 
摘要由CSDN通过智能技术生成
  1. typedef typename iterator_traits<_Iter>::value_type  value _type;  

1:简介typename

typename iterator_traits<_Iter>::value_type是类型名;但是感到困惑的是这里为什么要使用typename关键字?

 typenameC++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数

typename在下面情况下禁止使用:

  1. 模板定义之外,即typename只能用于模板的定义中
  2. 非限定类型,比如int,vector<int>之类
  3. 基类列表中,比如template <class T> class C1 : T::InnerType不能在T::InnerType前面加typename
  4. 构造函数的初始化列表中

       如果类型是依赖于模板参数的限定名,那么在它之前必须加typename(除非是基类列表,或者在类的初始化成员列表中)。

2:Traits编程技术

STL 编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了,迭代器使其独立设计成为可能。 Traits 编程技术是STL中最重要的编程技术,Traits可以获取一个类型的相关信息。

若我们要知道用户自定义类型的函数返回值类型,我们可以使用内嵌型别技术就可以知道返回值的类型;看下面程序:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. templates <class T>  
  2. struct Iterator   
  3. {  
  4. typedef
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值