《Effective C++》42: 了解 typename 的双重意义
来源:互联网 发布:天下三捏脸数据男贴吧 编辑:程序博客网 时间:2024/06/08 18:33
在 t下面 template 声明式中,class 和 typename 意义完全相同。
template <class T> class Widget;template <typename T> class WIdget;
然而 C++ 并不总是把 class 和 typename 视为等价。 有时候,我们一定得使用typename。
一般来说,在缺省状态下,C++解析器认为在 template 中的嵌套从属名称是个变量,而不是个类型。
如果要告诉解析器,T::const_iterator 是一个类型,只需要在它之前加一个关键字: typename即可。
如:
template <typename T>void Func(const T& container){typename T::const_iterator iter; // ... ...}
但是,“template 必须作为嵌套从属类型名称的前缀词”也是有例外的。
typename 不可以出现在 base classes list内的嵌套从属类型名称之前,
也不可以出现在member initialization list中作为base class修饰符。
例如:
template <typename T>class Derived : public Base<T>::Nested // base classes list 不允许 “typename”.{public:explicit Derived(int x): Base<T>::Nested(x) //不可以出现在member initialization list中作为base class修饰符{typename Base<T>::Nested temp;//... ...}//... ...};
1 0
- Effective C++:条款42:了解typename的双重意义
- 《Effective C++》42: 了解 typename 的双重意义
- 读书笔记《Effective C++》条款42:了解typename的双重意义
- 《Effective C++》读书笔记之item42:了解typename的双重意义
- 了解typename的双重意义(Effective C++_42)
- Effective C++ Item 42 了解 typename 的双重意义
- Effective C++ — 条款42:了解typename的双重意义
- C++之了解typename的双重意义(42)---《Effective C++》
- 条款42:了解typename的双重意义
- 条款42:了解typename的双重意义
- 条款42:了解typename的双重意义
- 条款42:了解typename的双重意义。
- 条款42:了解typename的双重意义
- 条款42:了解typename的双重意义
- 条款42:了解typename的双重意义
- 了解typename的双重意义
- 了解typename的双重意义
- 了解typename的双重意义
- Linux命名cat grep查看日志
- 对象(DuoTaiDemo1)
- 笔记二 opencv2 学习规划
- Android之Notification的多种用法
- HTML中让表单input等文本框为只读不可编辑的方法
- 《Effective C++》42: 了解 typename 的双重意义
- Objective-C Runtime 一小时入门教程(上)
- poj1502 MPI Maelstrom(dijkstra模板)个人理解
- Android的DisplayUtil
- struts2基础
- uva11054 - Wine trading in Gergovia
- 接口和抽象类的区别
- 股票文章笔记
- 对象(DuoTaiDemo2)