2013-03-12 23:40:34 +08:00
|
|
|
|
|
|
|
|
|
# C++ Template 进阶指南
|
|
|
|
|
|
|
|
|
|
## 0. 前言
|
|
|
|
|
|
2013-03-13 10:39:12 +08:00
|
|
|
|
###0.1 C++另类简介:比你用的复杂,但比你想的简单
|
|
|
|
|
|
|
|
|
|
###0.2 适宜读者群
|
|
|
|
|
C++ Templates和Modern C++ Design的关系
|
|
|
|
|
|
|
|
|
|
###0.3 版权
|
|
|
|
|
|
2013-03-12 23:40:34 +08:00
|
|
|
|
## 1. Template的基本语法
|
|
|
|
|
|
|
|
|
|
###1.1 Template Class的基本语法
|
|
|
|
|
###1.2 Template Function的基本语法
|
|
|
|
|
###1.3 整型也可是Template参数
|
|
|
|
|
###1.4 类中类:灵活的模板定义
|
|
|
|
|
|
|
|
|
|
## 2. 模板世界的If-Then-Else:特化与偏特化
|
|
|
|
|
###2.1 实例化/特化类模板:从类模板到可以定义变量的具体类
|
|
|
|
|
###2.2 类模板的匹配规则:特化与部分特化
|
|
|
|
|
###2.3 函数模板的重载、特化与部分特化
|
|
|
|
|
###2.4 技巧单元:模板与继承
|
|
|
|
|
|
|
|
|
|
## 3 拿起特化的武器,去写程序吧!
|
|
|
|
|
###3.1 利用模板特化规则实现If-Then-Else与Switch-Case
|
|
|
|
|
###3.2 特化可以有多个选择:替换失败并不是一个错误,只是一种可能
|
2013-03-13 10:39:12 +08:00
|
|
|
|
###3.3 技巧单元:获得类型的属性——类型萃取(Type Traits)
|
2013-03-12 23:40:34 +08:00
|
|
|
|
|
|
|
|
|
## 4 用模板写程序吧!骚年!
|
2013-03-12 23:56:48 +08:00
|
|
|
|
###4.1 模板上的递归
|
|
|
|
|
###4.2 将循环变成递归,将分支变成递归,将一切变成递归
|
|
|
|
|
###4.3 实战单元:元编程的Fibonacci数列
|
|
|
|
|
###4.4 技巧单元:typename与template的另一种用法
|
|
|
|
|
###4.5 实战单元:撰写你自己的元编程“函数”库
|
2013-03-13 10:39:12 +08:00
|
|
|
|
###4.6 实战单元:实现元编程上的数据结构——以Vector为例
|
2013-03-12 23:40:34 +08:00
|
|
|
|
|
|
|
|
|
## 5 关于模板,你还需要知道的其它常识
|
|
|
|
|
###5.1 Template-Template Class
|
2013-03-13 10:39:12 +08:00
|
|
|
|
###5.2 技巧单元:高阶函数——从函数到函数的组合
|
2013-03-12 23:40:34 +08:00
|
|
|
|
###5.3 实战单元:STL中的Allocator Rebinder
|
2013-03-12 23:56:48 +08:00
|
|
|
|
###5.4 像看堆栈一样的看出错信息
|
2013-03-12 23:40:34 +08:00
|
|
|
|
|
2013-03-13 10:39:12 +08:00
|
|
|
|
## 6 C++11的新特性
|
|
|
|
|
###6.1 变参模板
|
|
|
|
|
###6.2 Lambda与模板程序
|
|
|
|
|
|
|
|
|
|
## 7 结语:讨论有益,争端无用
|