1.准备知识
- typename用法
- 用法1:等效于模板编程中的class
- 用法2:用于显式地告诉编译器接下来的名称是类型名,对于这个区分,下面的参考链接中说得好,如果编译器不知道 T::bar 是类型名的话 T::bar * p可能就被理解成了T::bar 乘以p,T::bar & p可能就被理解成为了 T::bar 和p做逻辑与操作。 事实上,在模板编程时,如果传入的模板参数为T(T里面有模板参数的非独立名字bar),那么在不显示指定的话,c++或假定T::bar为变量名以消除歧义。
- “A name used in a template declaration or definition and that is dependent on a template-parameter is assumed not to name a type unless the applicable name lookup finds a type name or the name is qualified by the keyword typename.”
- 参考链接 : typename(wiki)
- traits编程技法(内嵌型别使用)
2.迭代器相关型别
- value type(所指型别)
- difference type(距离型别)
顾名思义,就是迭代器所指之物的型别,这个在上一节中作为例子讲过。
- reference type(所指型别的引用型别)
- pointer type(指针型别)
- iterator catalog(迭代器类型型别)
3.std::iterator 的保证
4.总结