typename和class
来源:互联网 发布:淘宝卖中药材 编辑:程序博客网 时间:2024/06/09 15:48
在模版编程中,经常看到typename和class:
template<typename T>void print2nd( T& c){...}
template<classT>void print2nd( T& c){...}
上面这种情况,typename和class是完全一样的。
那么,什么时候必须使用typename而不是class?
template<typename C>void print2nd(const C& container){C::iterator iter(container.begin()); ...}上面这个模版函数,我们的目的是处理容器,因而在里面使用容器的迭代器C::iterator iter,但是编译器并不知道C是什么东西,因此就不知道C::iterator 是什么了。C++有个规则可以解释这个状态:如果解析器在template中遭遇一个嵌套从属 名称,它就假设这个名称不是个类型,除非你告诉它。所以,我们必须明确告诉它这是个类型:
template<typename C>void print2nd(const C& container){typename C::iterator iter(container.begin()); ...}
只要在嵌套从属名称前面加上typename即可。
”typename必须作为嵌套从属类型名称的前缀词“ 这一规则的例外是,typename不可以出现在base class list内的嵌套从属类型名称之前,也不可以在member initialization list
中作为base class 的修饰符。例如:
template<typename T>class Derived :public Base<T>::Nested //这里不能出现typename{public:explicit Derived(int x):Base<T>::Nested(x) //这里不能出现typename{typename Base<T>::Nested temp; //这里必须出现typename ...} ...};
阅读全文
0 0
- 关于typename和class
- class和typename
- typename和class
- typename和class
- class 和 typename的区别
- typename和class的区别
- typename和class的区别
- typename和class的区别
- typename和class的区别
- C++中的class和typename
- C++中的typename和class对比
- c++的template中的class和typename
- C++中typename和class的区别
- c++的template中的class和typename .
- C++中typename和class的区别
- template <typename T>和template <class T>
- C++中typename和class的区别
- C++中typename和class的区别
- MUI(2)
- [leetcode]Jump Game II
- 错误
- mysql-5.5.56免安装版配置方法
- Java基础应用之循环控制(终止循环体)
- typename和class
- Android程序猿带你学python第5章--输入与输出(I/O)
- MUI(1)
- C笔记 联合体 枚举
- 愿你一切从头做起---Android test
- struct构造函数
- 滚动事件
- Apache Shiro系列(1)
- 封装JDBC—非框架开发必备的封装类