《C++ Templates 中文版》[陈伟柱译]

原创 2007年10月11日 07:31:00

 第1章 关于本书  ok
第1部分 基础  
【模板就是可以使用不同类型的函数或类】
【相似函数怎么办?逐一实现(维护难!),类继承(不检查-->维护难),宏(蠢-->维护难)】
【模板是解决之道:严格检查、编译器多劳力、自己多劳心-->换来简洁易维护代码】
第2章 函数模板
2.1 初探函数模板  
 2.1.1 定义模板 【声明时戴上尖帽子-->模板参数列表】
 2.1.2 使用模板  【像普通函数直接调用】
2.2 实参的演绎(deduction)  
【函数模板的‘实参推演’:编译器根据‘调用参数’-->‘模板参数’-->内部其他类型】
【‘实例化’:编译器创建函数实体。编译器不只检查语法正确,还要检查当前调用合法-->代码组织问题!】
2.3 模板参数
【基本不能得到返回参数-->必须显示指定‘模板实参列表’-->max<...>()麻烦!】
【‘实参列表’形式可简化!-->减少指定工作】
2.4 重载函数模板 【可以混合普通函数,编译器自己选!一定要让编译器看见所有版本】
2.5 小结
第3章 类模板  
3.1 类模板Stack的实现  【定义实现都在hpp中】
 3.1.1 类模板的声明
 【尖帽子+内部使用实际类类型】
【带了帽子就不同了,定义中类类型是stack<T>,其他地方还是stack(构造函数名)】
 3.1.2 成员函数的实现  
【外部定义:尖帽子、类类型限定-->template<T> T stack<T>::pop(T t)】
【内部定义:都不要了】
3.2 类模板Stack的使用  
【不能从成员函数推演,必须‘显示声明类类型’指定模板实参--->stack<int> s】
【指定类类型也是推演!不必从成员函数推演】
【成员函数需要才编译出函数实体,否则只是代码-->残疾类型也可以混进来】
【帽子太高需要typedef!>>hack!】
3.3 类模板的特化
【‘类模板特化’-->指定实参类类型-->空帽子+类类型】  
【成员函数成为普通函数-->不戴帽子,但类类型小帽子存在!】
【基本类模板必须存在,全部成员函数都要特化-->否则(只要不用,编译器不管)没有特化整个类】
3.4 局部特化  
【在基本类模板基础上,指定部分实参-->视为新模板,但跳不出尖帽子框框】
【局部特化:定义时双帽子!尖帽子可能缩小!-->template<T> stack<T,int> {}】
3.5 缺省模板实参  【定义时可以设置缺省值,可以引用前面参数-->调用参数减少-->引起困惑】
3.6 小结
 
第4章 非类型模板参数  【能否写出对称的变量帽子?-->没必要了!就成为普通函数】
4.1 非类型的类模板参数
【template<typename T,int MAX>-->不对称的帽子:类型vs变量-->参与表达式】 
【定义时也是双帽子:template<typename T,int MAX> T stack<T,MAX>::pop()】
【使用时也是不对称帽子:stack<int,20> stack<int,40>-->不同的类型!】
4.2 非类型的函数模板参数
【也是不对称帽子-->可参与表达式改造】 
【可以参与算法-->但是不能参与函数模板的实参推演-->强制转换】
4.3 非类型模板参数的限制  【只能使用整数相关的类型!不能使用全局指针!extern解决问题】
4.4 小结
第5章 技巧性的基础知识  
5.1 关键字typename  【受限帽子、.typename、->typename,详见9.3.3
5.2 使用this->  【有基类的类模板应该显示限制调用:this->foo()、base::foo()-->否则可能跑到全局函数】
5.3 成员模板  
【成员函数模板:引入新模板参数(可以推演)-->定义时戴上3层帽子!】
5.4 模板的模板参数
【stack<int,vect<int>>-->需要2次指定!希望stack<int,vect>-->把模板的参数指定为模板型参数】
【没用到的模板参数可以不写,但保留typename】
改变了正常表达,编译器由此沦为宏编辑器!表达式模板?】
【函数模板不支持!】 
【由于指定类模板为参数,所以需要用class】
5.5 零初始化  【应该初始化-->int等不能自动调构造函数-->显示调用-->初始化列表】
5.6 使用字符串作为函数模板的实参 【字符串可能引起问题】
5.7 小结
 
第6章 模板实战  
6.1 包含模型   
 6.1.1 链接器错误  
 【普通函数:编译{定义cpp得到obj,调用记录在案},链接{在obj中查找}】
【模板函数:编译{cpp不知调用参数所以不编译函数实体,调用记录在案,但没有要求按int产生函数实体},链接{找不到}】
6.1.2 头文件中的模板  【包含模型带来大量头文件,编译时间长】
6.2 显式实例化  
 6.2.1 显式实例化的例子  【显示实例化指示符 template class stack<int>,可以解决链接问题。但代码维护问题出现】
 6.2.2 整合包含模型和显式实例化
【双头一体:{声明定义hpp}或{声明hpp,显示实例化cpp}】 
6.3 分离模型  【也叫导出模板】
 6.3.1 关键字export  
【提供专区供连接器查找!加在第一个声明的前面 export template】
【不能和inline同用。可以用于其他】
 6.3.2 分离模型的限制  
 【缺点:2处处理产生不可见耦合。耦合导致定义文件变化处处重编译;不可见导致额外分析工作保持更新】
6.3.3 为分离模型做好准备  【处处EXPORT,用开关决定其内容】
6.4 模板和内联   
【内联函数往往置于hpp中-->错觉:模板函数也是内联NO!-->短小函数应该内联!】
6.5 预编译头文件 【1.hpp包含不变头文件,1.cpp使得产生预编译头文件,其他cpp包含1.hpp在最前面】 
6.6 调试模板  【语法语义违约有时难分别,使用concept违约】
 6.6.1 理解长段的错误信息  【哪个实例化错了,为什么实例化,为什么错】
 6.6.2 浅式实例化  
【深层实例化错误导致信息剧增!难以把握】
【方法1:提前测量。这种哑代码复杂琐碎,boost提供conceptchecklibrary】
 6.6.3 长符号串  【太长导致截断】
 6.6.4 跟踪程序 【小工具提供算法诊断】
 6.6.5 Oracles 【小工具增强版】
 6.6.6 Archetypes(原型)  
6.7 本章后记  
6.8 小结 
第7章 基本模板术语  
7.1 “类模板”还是“模板类”  【类模板】 
7.2 实例化和特化  【基模板-->实例化隐式特化-->显示特化(空帽子)-->局部特化(双帽子)】
7.3 声明和定义 【定义分配内存,有了地址】 
7.4 一处定义原则   【只分配一处地址】
7.5 模板实参和模板参数
【模板实参是调用前需要推演用的,模板实参是调用时替换用的】
【stack<int>形成template-id,可以当作一个类型名称,代表‘显式替换’。缺省参数产生‘隐式替换’】
【模板实参必须是编译器可定的模板实体或值。模板参数是编译器实体所以可以用来产生模板实参】

edward_mj退役经验帖(浙大2届Final队员陈伟杰的退役贴)

edward_mj退役经验帖 Posted on July 5, 2014 by edward_mj 考完试了,也是时候补上退役帖了。 考虑了一阵要怎么写,鉴于本文的目的主要...
  • u012823354
  • u012823354
  • 2014年10月18日 11:29
  • 1246

“胡”说IC——菜鸟工程师完美进阶

“胡”说IC——菜鸟工程师完美进阶(数十位行业精英故事分享,顶级猎头十多年来经验总结,对将入或初入IC电子业“菜鸟”职业发展、规划的解惑和点拨。) 胡运旺 编著   ISBN 978-7-121...
  • broadview2006
  • broadview2006
  • 2014年05月28日 13:27
  • 1847

陈伟视频总结

说起陈伟视频我就不开心,总是看不懂啊,看不懂,哎,总之呢,先看看再说,以后运用到或者再接触一下吧前面的小知识1.工程添加部件(控件)2.按住Ctrl键点击控件,然后松开,在窗体上点击就可以了(多个)取...
  • MirabelleZWH
  • MirabelleZWH
  • 2017年06月23日 12:20
  • 178

陈伟视频总结

第一讲VB编程与应用               第一讲主要讲的是:可视化开发  可视化开发是一个重要的方向、开发控件  它的应用非常广泛、组件技术COM\DCOM    其他相关资料:Win...
  • awiner
  • awiner
  • 2017年12月31日 09:32
  • 160

陈伟视频总结

VB的最后一项陈伟视频终于看完了,看到其他小伙伴的进度都飞速进展,我很着急但是我也很无奈啊,陈伟视频加速看仍然很无聊啊。        陈伟视频的前三十集主要讲了VB的一些基础知识,包括数据类型、常用...
  • zwj_jyzl
  • zwj_jyzl
  • 2017年07月23日 09:13
  • 278

陈硕-Linux C++ 服务器端这条线怎么走?一年半能做出什么?

您好,我现在大三了,请问我想往 Linux C++ 服务器方向发展该怎么走,比如现在在看 Linux 程序设计,还应该在看哪些书,可以完成一些什么项目?谢谢。 有 C++、C 基础,算法数据结构还不...
  • u012275397
  • u012275397
  • 2015年11月09日 22:00
  • 622

C++学习笔记(达内视频版)

UNIX C++学习笔记
  • conanswp
  • conanswp
  • 2014年07月15日 22:42
  • 6256

C++ 高级篇(一)—— 模板(Templates)

模板(Templates)是ANSI-C++ 标准中新引入的概念。如果你使用的 C++ 编译器不符合这个标准,则你很可能不能使用模板。     函数模板( Function templates) ...
  • zqixiao_09
  • zqixiao_09
  • 2016年05月22日 12:44
  • 14881

VB 陈伟视频总结

初次接触陈伟视频,还是在大一那个暑假,因为暑期的任务安排是看陈伟视频。在家无聊的时候打开电脑开了几集,当时的感觉就是更加无聊,看着看着就睡着了,我妈还说,看这孩子都放假了还学的这么累!所以还给我做了我...
  • Ming_5257
  • Ming_5257
  • 2017年06月11日 10:13
  • 167

陈伟畅谈项目感受

盼望已久的第一个项目终于结束了,其中的种种情绪,诸如兴奋,紧张,烦躁,以及点点的气馁都已经烟消云散了,现在去看项目刚开始的时候的自己,确实算是比较迷茫的,对于一个没有接触过整体项目的人来说,思路,流程...
  • u011886490
  • u011886490
  • 2013年08月30日 15:03
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《C++ Templates 中文版》[陈伟柱译]
举报原因:
原因补充:

(最多只允许输入30个字)