最近在看STL中关于迭代器部分的时候,经常见到typename这个关键字,举个例子:
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;
};
搞不懂这个typename在这里是什么意思,记得好像在哪儿见过,怎么也想不起来了,于是上网查资料,可是得到的结果大部分都是在定义模板类或模板函数时关于class和typename的区别,跟这个好像不搭边。不过,最终还是在一篇文章中了解了相关的知识,原话是这样的:
“typedef orgtype newtype
当orgtype编译器不知道是一种类型时,用:
typedef typename orgtype newtype
最常见的用法是,在类里面typedef了一个newtype,在另一个地方使用时。”
看了这点,略有眉目,于是自己试了试: