为什么我会读这本书?
早在2015年底,我已经通读了《C++ Primer》,这本书基本上涵盖了C++的绝大部分知识,对当时的我来说可谓醍醐灌顶,许多之前感到疑惑的问题都迎刃而解。然而一年后的今天,C++知识再次遇到瓶颈,模板元编程成了我面前的一座大山。
起因是学习SLAM(Simultaneous Localization And Mapping,即时定位与地图构建)的过程中,需要用到许多C++开源库,比如Eigen、Ceres、Sophus等等。这些库为了提高性能,使用了大量模板元编程。以我现在的理解,模板元编程就是利用模板生成代码的编程方式,这种做法可以把一些运行期计算量提前到编译期,从而缩短代码运行时间。这些库的使用并不复杂,只需要简单的模板知识就可以上手。但是对于我这种好奇心严重的人,总想深入库源码探究一下它们的实现原理。可是一打开源码我就傻眼了,几乎完全看不懂,那种绝望的感觉,让我决心深入学习C++模板,这应该也是C++程序员进阶的必经之路吧。
于是我购买了A神(某C++大牛)曾向我推荐的经典书籍《C++ Templates》,开始研读。
本来不打算写这个系列的文章,因为这本书的知识很琐碎,细节太多,很难归纳出核心思想。但回想起前年读《C++ Primer》,已经认真到极致,可如今仍然几乎忘了大半。所以决定还是做些记录,即使不那么连贯有趣,也总比一字不写强。
版本
C++ Templates 中文版本书目录
第1章 关于本章
第1部分 基础
第2章 函数模板
第3章 类模板
第4章 非类型模板参数
第5章 技巧性基础知识
第6章 模板实战
第7章 模板术语
第2部分 深入模板
第8章 深入模板基础
第9章 模板中的名称
第10章 实例化
第11章 模板实参演绎
第12章 特化与重载
第13章 未来的方向
第3部分 模板与设计
第14章 模板的多态威力
第15章 trait与policy类
第16章 模板与继承
第17章 metaprogram
第18章 表示式模板
第4部分 高级应用程序
第19章 类型区分
第20章 智能指针
第21章 tuple
第22章 函数对象和回调
附录A 一处定于原则
附录B 重载解析
网友评论