- C++ 模板技术是泛型编程的核心,但囿于编译器技术限制,不得不带着缺陷诞生,语法晦涩,报错冗长,难以调试,应用层开发较少使用,相关技术书籍匮乏,因此掌握难度较大。模板相关的经典技术书籍主要有三本,分别是 2001 年出版的 Modern C++ Design、2002 年出版的 C++ Templates、2004 年出版的 C++ Template Metaprogramming。三者基于的 C++ 标准都是 C++98,Modern C++ Design 涉及 Andrei Alexandrescu 写书时配套的 Loki,C++ Template Metaprogramming 涉及 Boost,二者以介绍元编程(模板技术的一种应用)为主,只有 C++ Templates 主要介绍 C++98 标准的模板技术。时过境迁,C++ 标准的更新逐步修复了一些语法缺陷,减少了使用者的心智负担,并引入了语法糖和工具,让编写模板越来越简单。2017 年 9 月 25 日,基于 C++17 标准,C++ Templates 2ed 出版,填补了十多年间模板技术进化时相关书籍的空白,堪称最全面的模板教程,也是对 C++11/14/17 特性介绍最为全面的书籍之一。此为个人笔记,精简并覆盖了原书所有关键知识点(略过涉及代码较少的 ch 10 模板术语、ch 17 未来的方向、ch 18 模板的多态威力 三章),对书中示例代码使用 VS 2017 编译过并对错误代码全部进行了纠正(仅一处因语法复杂编译失败),此外个人会在相应处补充 C++20 相关特性,如 concepts。或是学习源码时遇到模板黑魔法不得其解,或是见他人轻松把玩模板心生羡慕,或是希望无限逼近精通 C++ 的状态,C++ 爱好者对模板求知若渴却又望而生畏,分享该笔记,希望帮助更多 C++ 爱好者掌握模板的使用。
- 函数模板(Function Template)
- 类模板(Class Template)
- 非类型模板参数(Nontype Template Parameter)
- 可变参数模板(Variadic Template)
- Tricky Basic
- 移动语义与 enable_if
- 按值传递与按引用传递(By Value or by Reference?)
- 编译期编程(Compile-Time Programming)
- 模板实战(Using Templates in Practice)
- 泛型库(Generic Library)