effective C++条款四十二解读

来源:互联网 发布:linux 修改时区 cst 编辑:程序博客网 时间:2024/06/05 04:52

了解typename的双重意义

1.template <class T>与template <typename T>没有区别。

typename 的另一种用法,我们以一个代码来解释:

template<typename C>void print2nd(const C&container){if(container.size()>2){C::const_iterator iter(container.begin());++iter;int value=*iter;std::cout<<value;}}
C::const_iterator 的名称依赖于模板参数C,是从属于C的名称,同时带了::符号是一个从属嵌套名称,需要在前面加上typename

template<typename C>void print2nd(const C&container){if(container.size()>2){typename C::const_iterator iter(container.begin());++iter;int value=*iter;std::cout<<value;}}
这样才能通过编译,不然C::const_iterator 完全可能是一个静态变量。

由于 C::const_iter太长我们经常会有这种用法 typedef typename C::const_iter const_iter.

另外注意不要把typename放在基类列表以及成员初始列之中。

原创粉丝点击