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>
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; }
相关文章推荐
- template <typename T>
- C++ template typename to string <==> typeid(T).name()
- 用模板template<typename T>实现int double等类型转string
- C++: typename in a template template parameter
- cpp typename关键字
- openerp学习笔记 domain 增加扩展支持,例如支持 <field name="domain">[('type','=','get_user_ht_type()')]</field>
- 用模板template<typename T>实现int double等类型转string
- C++中的模板template <typename T>
- C++之template <typename T>
- 用模板template<typename T>实现int double等类型转string
- template(name="remote" type="string" string="%msg%")
- evil C++ -- template typename vc and GNU compiler
- 试题:编译期确定template <typename U, typename V>中U, V是否为同类型
- 用模板template<typename T>实现int double等类型转string
- template<typename T,int n>
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
- 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
- 用模板template<typename T>实现int double等类型转string
- template <typename T>和template <class T>
- unorder_set<typename T> 学习