关于typename和class的使用
2014-06-24 22:29
141 查看
一般情况下,是用typename还是用class纯粹是一个风格问题。但是在一种情况下,它就不是一个风格问题了。为了避免潜在的语法解析二义性,你需要在从属于形式类型参数的类型名前面使用typename。这样的类型被称为从属类型,用一个例子可以说明这一点。假设你要写一个函数模板,给它一个STL容器,它将返回容器中的最后一个元素是否大于第一个元素。下面是一种实现方式:
template <typename C>
bool lastGreatThanFirst(const C&container)
{
if(container.empty())
returnfalse;
typename C::const_iterator begin(container.begin());
typename C::const_iterator end(container.end());
return *--end > *begin;
}
一般情况下,是用typename还是用class纯粹是一个风格问题。但是在一种情况下,它就不是一个风格问题了。为了避免潜在的语法解析二义性,你需要在从属于形式类型参数的类型名前面使用typename。这样的类型被称为从属类型,用一个例子可以说明这一点。假设你要写一个函数模板,给它一个STL容器,它将返回容器中的最后一个元素是否大于第一个元素。下面是一种实现方式:
template <typename C>
bool lastGreatThanFirst(const C&container)
{
if(container.empty())
returnfalse;
typename C::const_iterator begin(container.begin());
typename C::const_iterator end(container.end());
return *--end > *begin;
}
相关文章推荐
- 关于android使用ksoap2报Caused by: java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
- 泛型编程使用gcc编译器时的两个注意事项:关于typename和迭代器
- 【讨论】关于什么时候使用module,什么时候使用class
- angularJs中关于ng-class的三种使用方式说明
- 关于android studio中使用class.forname()方法动态获取类实例报NO CLASS FOUND异常的几种处理方法
- 关于@class的使用
- 关于Handler 使用This Handler class should be static or leaks might occur 警告处理
- 关于tableview的 [self.tableView registerClass: forCellReuseIdentifier:使用方法
- 关于drools使用时的wrong class format报错问题
- 关于C++中模板中的typename和class的区别比较
- 生成class关于使用javah生成头文件时无法访问class文件的问题
- 关于C++中模板中的typename和class的区别比较
- 关于使用动态代理创建代理对象是报错 java.lang.ClassCastException: $Proxy0 cannot be cast to 的解决办法
- 关于C++中模板中的typename和class的区别比较
- 转@关于c++模板template中的typename 和class的区别
- 关于使用EJB时出现javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory的问题
- typename 和 class在模板使用的时候的区别
- 关于在使用tomcat做开发测试的某些时候无端报ClassNotFound异常的解决方法
- 关于数据库连接池使用代理报 java.lang.ClassCastException
- (原創) 在template parameter list中,該使用typename還是class? (C/C++) (template)