- 
      
 
 typedef
 
 
 
 
 typename
 
 
 iterator_traits<_Iter>::value_type value _type;
 
 
    
     
      
       
        1:简介typename
       
      
     
    
   
    
     
      typename iterator_traits<_Iter>::value_type
     
    
    
     是类型名;但是感到困惑的是这里为什么要使用
    
    
     typename
    
    
     关键字?
    
   
    
     typename
    
    
     在
    
    
     C++
    
    
     类模板或者函数模板中经常使用的关键字,此时作用和
    
    
     class
    
    
     相同,只是定义模板参数
    
    
   
    
    
   
    
     typename
    
    
     
      在下面情况下禁止使用:
     
    
   
- 
     
 模板定义之外,即typename只能用于模板的定义中
 
- 
     
 非限定类型,比如
 
 
 int,vector<int>
 
 
 之类
 
- 
     
 基类列表中,比如
 
 
 template <class T> class C1 : T::InnerType
 
 
 不能在
 
 
 T::InnerType
 
 
 前面加
 
 
 typename
 
- 
     
 构造函数的初始化列表中
 
    
     
     
     
      
       如果类型是依赖于模板参数的限定名,那么在它之前必须加
      
     
    
    
     
      typename
     
     
      (除非是基类列表,或者在类的初始化成员列表中)。
     
    
   
    
     
      
       2:
       
        Traits
       
       
        编程技术
       
      
     
    
   
   
    在
   
   
    STL
   
   
    编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了,迭代器使其独立设计成为可能。
   
   
    Traits
   
   
    编程技术是
    
     STL
    
    中最重要的编程技术,
    
     
      Traits
     
     可以获取一个类型的相关信息。
    
   
   
    
     
     
    
   
    
     若我们要知道用户自定义类型的函数返回值类型,我们可以使用内嵌型别技术就可以知道返回值的类型;看下面程序:
    
   
    
    
   
- 
      
 
 templates <
 
 
 class
 
 
 T>
 
 
- 
      
 
 struct
 
 
 Iterator
 
 
- 
      
 {
 
- 
      
 
 typedef
 
 
 

