前题:
最近公司接到一个平台项目,平台中涉及到C++11和较多模板方面的代码,发现同事对C++模板部分的理解几乎为零,也没有人了解C++11的语法,所以做了几次培训,刚开始在C++11部分的讲解尚可,模板部分的培训效果可以说是一塌糊涂,几乎没有人能听懂我在说什么,两次以后参加的人也是寥寥无几了,事后总结了一下,感觉模板里面的内容如果没有基础想听懂也是有的难,于是在此记录下本次培训涉及到的模板方面的内容,主要包含以下方面的内容
- 模板参数的类别及相关知识,包含{类型模板参数(Type Template Parameters)、非类型模板参数(Non-Type Template Parameters)、模板模板参数(Template Template Parameters)以及C++11中新的内容 可变模板(Variadic Template)和其涉及的参数包(Parameters Pack)}
- 模板的特化(Specialization)和实例化(Instantiation)
- 全特化(Full Specialization)或者叫(Explicit Specialization), 类模板的偏特化(Partial Specialization)
- 显示实例化(Explicit Instantiation),隐式实例化(Implicit Instantiation)
- ADL查找(Argument Dependent Lookup)
- 函数模板的实参演绎(Template Argument Deduction)
- SFINAE(Substitution Is Not An Error),这部分技巧偏多
- 函数模板的重载(Template Functions Overload),这部分相对比较复杂,涉及到当通过模板参数演绎的方式来调用函数的时候如何在重载函数中做选择的问题
- 列举各种案例,其中一部分是来自于CppReference 一部分来自Stack Overflow的提问和回答,还有一部分是我自己写的。
先写这些内容,剩下的以后觉得不足再做补充,看起来是个挺浩大的工程,所以不着急,慢慢来,先开个题,争取五月份以前可以总结完。