typename关键字

在 template declaration(模板声明) 中class 和 typename 有什么不同?

1 class 和 typename 在声明一个 template type parameter (模板类型参数)时, class 和 template 是一样的东西。

template <class T> class Widget;
tempalte <typename T> class Widget; // the same as above
2 typename 在模板中标明 “内嵌依赖类型名”

// STL 中 iterator_traits 模板
 template <class _Iterator>
struct iterator_traits {
  typedef typename _Iterator::iterator_category iterator_category;
  typedef typename _Iterator::value_type    value_type;
  typedef typename _Iterator::difference_type   difference_type;
  typedef typename _Iterator::pointer     pointer;
  typedef typename _Iterator::reference    reference;
};
“内嵌” 是指定义在类名的定义中,例如iterator_traits 中定义的 iterator_category、value_type 等类型。

“依赖” 是指依赖于一个模板参数。例如 typedef typename _Iterator::value_type value_type 中定义的 value_type依赖模板参数_Iterator。

“类型名” 是指这里要指出是个类型名,而不是变量。

那么 typename 的意义就是告诉 C++ 编译器 ( typedef typename _Iterator::value_type value_type  _Iterator::value_typevalue_type类型而不是该类的一个静态变量。



你可能感兴趣的:(typename关键字)