typedef和typename的区别
来源:互联网 发布:淘宝买家秀合集 编辑:程序博客网 时间:2024/06/05 08:34
typename指示一个类型名,而非定义一个类型,以下声明了一个Seq::iterator类型的变量itr,其中Seq是一个模板实例化时才知道的类:
typename Seq::iterator itr;
如果没有typename指示,Seq::iterator会被认为是Seq的静态变量,而不是类型名。
typename关键字不会定义一个类型,如果你想定义一个新类型的话,你必须这样:
typedef typename Seq::iterator ITR;
相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template<class T>......
在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了: template<typename T>......
在模板定义语法中关键字class与typename的作用完全一样。
typename难道仅仅在模板定义中起作用吗?其实不是这样,typename另外一个作用为:使用嵌套依赖类型(nested depended name),如下所示:
class MyArray
{
public:
typedef int LengthType;
.....
}
template<class T>
void MyMethod( T myarr )
{
typedef typename T::LengthType LengthType;
LengthType length = myarr.GetLength;
}
这个时候typename的作用就是告诉c++编译器,typename后面的字符串为一个类型名称,而不是成员函数或者成员变量,这个时候如果前面没有typename,编译器没有任何办法知道T::LengthType是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不能够通过。
- typedef和typename的区别
- typedef和typename的区别
- typedef 和 typedef typename的用法和区别
- typename和typedef关键字,区别
- typedef和typedef typename
- typename 与 typedef的区别与应用
- typedef和typename关键字
- typedef和typename关键字
- typedef和typename关键字
- typedef和typename关键字
- typename和typedef关键字
- typedef和typename
- typename和typedef关键字
- typedef和typename关键字
- typename和typedef
- typedef和typename关键字
- typedef和typename关键字
- typedef和typename关键字
- DR和TUN模式中的arp_ignore和arp_announce参数
- CF 16 C Monitor
- hdu2471 History of Languages,ACM/ICPC Hangzhou2008 UVa1671
- Lua5.1编程4:Lua与C交互基础
- PopupWindow
- typedef和typename的区别
- 线段树(成段更新) 之 poj 3468 A Simple Problem with Integers
- oracle中char与varchar2的区别
- Farm Irrigation
- 常用软件收集
- hdu-2191-多重背包问题----悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
- Cocos2d-x提供了一中根据球面坐标轨迹旋转的方式CCOrbitCamera
- 刚好价格和
- hdu149850 years, 50 colors (多个最小顶点覆盖)