为什么我会读这本书?
早在2015年底,我已经通读了《C++ Primer》,这本书基本上涵盖了C++的绝大部分知识,对当时的我来说可谓醍醐灌顶,许多之前感到疑惑的问题都迎刃而解。然而一年后的今天,C++知识再次遇到瓶颈,模板元编程成了我面前的一座大山。
起因是学习SLAM(Simultaneous Localization And Mapping,即时定位与地图构建)的过程中,需要用到许多C++开源库,比如Eigen、Ceres、Sophus等等。这些库为了提高性能,使用了大量模板元编程。以我现在的理解,模板元编程就是利用模板生成代码的编程方式,这种做法可以把一些运行期计算量提前到编译期,从而缩短代码运行时间。这些库的使用并不复杂,只需要简单的模板知识就可以上手。但是对于我这种好奇心严重的人,总想深入库源码探究一下它们的实现原理。可是一打开源码我就傻眼了,几乎完全看不懂,那种绝望的感觉,让我决心深入学习C++模板,这应该也是C++程序员进阶的必经之路吧。
于是我购买了A神(某C++大牛)曾向我推荐的经典书籍《C++ Templates》,开始研读。
本来不打算写这个系列的文章,因为这本书的知识很琐碎,细节太多,很难归纳出核心思想。但回想起前年读《C++ Primer》,已经认真到极致,可如今仍然几乎忘了大半。所以决定还是做些记录,即使不那么连贯有趣,也总比一字不写强。
版本
本书目录
第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 重载解析