*******************************************************************1
C++ Template 中的 typename、class 关键字
在 c++Template 中很多地方都用到了 typename 与 class 这两个关键字,而且好像可以替
换,是不是这两个关键字完全一样呢?
相信学习 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 是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不
能够通过。
本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 :
http://blog.csdn.net/wzq981264/archive/2006/05/02/705002.aspx
评论0