您的位置:首页 > 其它

template学习之typename关键字

2013-07-13 16:09 106 查看
关键字 typename

template <typename T>

class MyClass{

typename T::SubType * ptr;

};

在这里第二个typename关键字的意思是:SubType是class T内部定义的一个型别

从而ptr是一个指向T::SubType型别的指针;

如果上例没有使用关键字typename,SubType会被认为是class T的一个static成员

于是被编译器理解为一个具体变数或一个物件,导致下面式子:

T::SubType * ptr;

所表达的意义变成了:class T的static成员SubType与ptr相乘

通常与某个template parameter相关的名称是个型别时,就必须加上关键字typename

一般比较常见的是STL容器供应的迭代器

如下代码:

template <typename T>
void printcoll(T const  &coll){
typename T::const_iterator pos;
typename T::const_iterator end(coll.end());

for(pos = coll.begin;pos!=end ; ++pos){
std::cout<< *pos <<" ";
}
std::cout << std::endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: