- C++新经典:模板与泛型编程
- 王健伟编著
- 2032字
- 2023-09-26 16:17:39
本书介绍
本书面向希望系统学习C++模板与泛型编程、元编程相关开发知识的中高级C++语言开发者,书中所讲解的知识具备一定的难度。本书的编写初衷是帮助读者解决各种模板与泛型编程中的语法问题,以免读者在阅读他人所写的泛型编程代码(如C++标准库代码、Boost库代码)时磕磕绊绊,甚至进行不下去。此外,本书也会对一些比较有商业价值的源码进行适当的分析和讲解,以进一步提高读者的实战能力,让读者更好地利用模板与泛型编程技术编写可复用的高质量代码以及供第三方开发者使用的接口库。
本书为在C++语言学习道路上有进取心、希望成长为高手的C++程序员所写。如果您希望能够通过阅读诸如C++标准库、Boost库等源码极大地提高自己的开发实力,写出可高复用的代码,甚至有志于写出很棒的程序库作品供第三方使用,那么毫无疑问,本书将助您在泛型编程方面打下良好的基础。
泛型编程方面的知识比较庞杂,C++新标准中也不断增加很多新的语法规则,本书包含C++ 11/14/17标准方面的泛型编程知识。在讲解的时候,笔者会以尽量讲述最常用的知识为目标,对一些偏难、怪且很少用到的知识不予涉猎,如果读者有需要,可以自行根据实际情况完善自己的知识体系。
模板与泛型编程方法虽然不如面向对象的程序设计方法常用,但作为一名C++开发者,在整个职业生涯中,总是需要拜读一些大师的作品促进自己技术上的提升,而在这些作品中,模板与泛型编程方法是司空见惯的,如果没有这方面的知识积累,就无法读懂大师的作品。同时,在实际编程中,在提高代码复用性和减少代码冗余方面,模板与泛型编程技术也一直有着不可替代的作用,这些都是应该学习好模板与泛型编程技术的重要原因。
本书具有以下比较明显的特点。
(1)内容比较全面。有笔者前几本“C++新经典”系列书作为基础,可以非常平滑地继续进行本书的阅读学习,不存在知识体系断裂导致学习者产生突兀、茫然之感。整本书无论是基础知识,还是高级知识以及演示范例,所涉及的知识点都非常到位,非常全面。
(2)注重细节,注重基础,把很多可能让人觉得比较陌生但基础性的知识以各种范例的形式展示出来,帮助读者打下良好的深入学习基础。
(3)讲解难度适宜,范例由浅入深。读者容易理解,容易消化,读起来顺畅没有障碍。
(4)目前在国内,支持C++ 11/14/17标准的模板与泛型编程类书还非常少,一些同类书出版的时间大多在十几年前,比较老旧,这给广大渴望学习模板与泛型编程开发知识的读者造成了很大的不便。而本书很好地弥补了目前国内缺少C++ 11/14/17标准发布后的“C++模板与泛型编程”类书的空白,是一本非常具有价值和意义的图书。
本书共分为7章。
第1章为C++编程环境介绍,搭建C++编程环境并创建一个最基本的能运行的C++程序,详细介绍Visual Studio中程序的调试方法,为后续书中内容的正常讲解铺平道路。
第2章为模板基础知识,涉及函数模板、类模板、变量模板、别名模板、可变参模板等诸多的基础概念以及奇异的递归模板模式与混入模式两种常用的编程手法。
第3章为模板进阶知识,以万能引用概念作为讲解起点,进一步介绍函数模板类型推断和auto类型推断的概念、完美转发的概念和实现,通过对标准库中std::enable_if编译期的分支逻辑的讲解引入SFINAE概念。
第4章为标准库的典型内容,将介绍一些C++标准库中典型且常用的函数模板、类模板、别名模板等功能组件及其实现细节,这些基础组件在模板与泛型编程中会被频繁使用。
第5章为萃取技术与策略技术。用萃取技术和策略技术生成的诸多模板广泛分布于C++标准库中,为程序人员的开发工作提供了极大的方便。第5章将通过诸多范例展示这两种技术在模板与泛型编程中的实际运用。
第6章为元编程。元编程的主要目的在于将各种计算从运行期提前至编译期进行,以实现程序运行时的性能提升,是一种增加程序的编译时间从而减少程序运行时间的一种编程技术。第6章会以两个经典的范例—typelist(类型列表)和tuple(元组)展示元编程的代码编写手法,使读者对元编程能够达到的效果有比较深刻的认识。
第7章为标准模板库代码,通过模板与泛型编程技术编写标准模板库(STL)中list容器以及配套迭代器的源码,让读者对这类核心的STL部件实现机制有更深刻的了解。本章还会对容器中迭代器分类目的进行剖析,最后,通过讲解一个算法—find_if的实现源码让读者掌握如何将可调用对象当作算法中的参数使用。
在成书的过程中,笔者参考了大量C++经典著作,并尽最大努力通过网络寻找一切对本书的书写有用的资料,通过已有认知进行精挑细选并认真实践,做到了既不遗漏重要的知识点,又不去涉及太复杂需要耗费相当心力去研究的各种代码片段(功能组件),这种代码片段更适合读者日后在有兴趣和必要的情况下慢慢研究。笔者的心愿是通过自己的表达把这些知识更通俗地传达给读者,可能让读者只花费1/5甚至1/10的精力就能获得相同的知识,让读者能够凭借本书入门C++模板与泛型编程,有了这样的基础,后面的自我提升就是“海阔凭鱼跃,天高任鸟飞”了。笔者为本书的编写付出了数月的时间和极大的心血。在这里,笔者发自内心地感谢诸多C/C++前辈在这个行业中多年的耕耘及对知识的积累和传播的贡献,感谢他们的奉献。