C++模板与泛型编程精讲

📚 共计 30 章节
01
模板初探
为什么需要模板?函数模板的定义与使用,模板的实例化过程。
函数模板实例化
02
函数模板重载
函数模板与普通函数的重载规则,模板特化与重载的优先级。
重载特化
03
类模板基础
类模板的定义,成员函数的模板化,类模板的实例化。
类模板成员函数
04
类模板特化
全特化与偏特化,特化的应用场景与注意事项。
全特化偏特化
05
模板参数详解
类型参数、非类型参数、模板模板参数。
类型参数非类型模板模板
06
模板与继承
类模板的继承,模板类作为基类,CRTP(奇异递归模板模式)。
CRTP继承
07
模板与友元
模板类中的友元函数,友元类的模板化。
友元模板
08
模板与静态成员
模板类的静态成员,静态成员的特化。
静态成员特化
09
模板编译模型
包含模型、分离模型(export关键字),预编译头文件。
编译模型export
10
typename与template关键字
typename的双重含义,template用于消除歧义。
typename消除歧义
11
模板实参推断
类型推断规则,引用折叠,完美转发。
引用折叠完美转发
12
可变参数模板
参数包的定义与展开,sizeof...运算符,递归展开。
参数包递归展开
13
折叠表达式
C++17的折叠表达式,一元与二元折叠,逗号表达式应用。
C++17折叠
14
SFINAE原则
替换失败不是错误,enable_if的使用,类型检测技巧。
SFINAEenable_if
15
概念与约束(C++20)
concept的定义,requires子句,约束的排序与组合。
C++20concept
16
类型萃取(Type Traits)
is_same, remove_reference, conditional等,自定义类型萃取。
type_traitsconditional
17
std::enable_if与SFINAE
enable_if的底层实现,条件编译的经典案例。
enable_if条件编译
18
std::conditional与编译期分支
编译期类型选择,与运行时多态的对比。
编译期conditional
19
decltype与auto
decltype的推导规则,auto与decltype(auto)的配合。
decltypeauto
20
std::declval与表达式类型
在未构造对象的情况下获取表达式类型。
declval表达式类型
21
编译期计算
constexpr函数,constexpr构造函数,编译期容器。
constexpr编译期
22
模板元编程基础
编译期递归,类型列表,编译期算法。
元编程类型列表
23
编译期循环与分支
编译期for循环(C++17),if constexpr。
if constexpr编译期循环
24
类型列表与编译期算法
类型列表的定义,编译期查找、排序、变换。
类型列表编译期算法
25
std::tuple深度解析
tuple的实现原理,编译期遍历,apply与make_from_tuple。
tupleapply
26
std::variant与std::any
类型安全联合体,类型擦除的模板实现。
variantany
27
策略类与策略模式
模板策略类,运行时策略与编译期策略的权衡。
策略模式编译期
28
混入(Mixin)与CRTP
通过模板实现混入,CRTP实现静态多态。
MixinCRTP
29
表达式模板
表达式模板的原理,惰性求值,数值计算优化。
表达式模板惰性求值
30
模板设计模式总结
泛型工厂,泛型单例,泛型观察者模式,模板在实际项目中的最佳实践。
设计模式最佳实践