最近一直在研究c++模板编程,虽然有些困难,但希望能够坚持下去.今天,在书上看见一个讨论模板编程typenameclass两个关键字的区别,觉得挺有意义的,就把它们给总结一下.

先看一个例子:

template<typename C>
typename C::value_type sum(C &c){
typedef typename C::value_type value_type;
typedef typename C::iterator iterator; value_type sum();
for(iterator i=c.begin();i!=c.end();i++){
sum+=*i;
}
return sum;
}

可以观察到C::value_type之前用关键字typename修饰.这是必须的,因为N是一个模板参数,编译器仅知其为一个类型,对于嵌套其内的标识符,编译器无从判断其意义.C::value_type可能是类型N的一个静态成员变量名、一个成员函数名,或者是一个嵌套定义的枚举值名.在无从推断嵌套标识符的意义时,编译器首先假定该标识符不是类型名,再根据上下文判断.所以当嵌套标识符确为类型名时,须在其前加typename修饰以免编译器出错。这也就是typename除在声明模板参数时等价于class外的独特之处.

最新文章

  1. 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)
  2. yii事件
  3. session过期,登录页被内嵌iframe的解决方案
  4. net user命令集合详解
  5. python 的 class
  6. Google code: Why ‘Everything up-to-date’ when pushing (git)
  7. hdu4714Tree2cycle
  8. 添加PATH
  9. swift学习 - 单例实现(singleton)
  10. 读书笔记-《Maven实战》-2018/4/18
  11. 一个可以拖动的自定义Gridview代码
  12. css21规范学习
  13. Linux内存管理 (21)OOM
  14. EOJ 306 树上问题
  15. mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)
  16. LeetCode: String to Integer (atoi) 解题报告
  17. Odoo发送短信
  18. ksyun主机挂载ksyun硬盘
  19. c# 四则运算出错
  20. c++中的函数对象《未完成》

热门文章

  1. 3月19日 html(一) html基础内容
  2. Symfony2之创建一个简单的web应用
  3. Python 一路走来 HTML CSS Javascript
  4. 较优H圈matlab实现
  5. 从汇编来看c语言
  6. MVC3路由设置访问后缀 html jsp
  7. 【No system images installed for this target】的解决方式
  8. hdu4622-Reincarnation(后缀自动机)
  9. WPF - 使用WPF创建图表
  10. node js npm 和 cnpm的使用