- 模板用的很少,只懂一点基本的,看也看不懂,get不到点,啥时候用到啥时候再看吧,哭。。。
条款41:了解隐式接口和编译期多态
- 显式接口:平时见的那些函数签名(即参数和返回类型以及const这种修饰符等等);
- 隐式接口:基于模板表达式,隐式的指出模板参数T必须支持该表达式中所进行的这些操作,这些操作就是隐式接口
- 编译期多态:
1.在编译期,类模板是显式指定模板参数,函数模板是编译器根据实参自己推断模板参数。总之,通过模板具现化在编译期根据模板参数去调用那些隐式接口;
2.函数重载解析,也是在编译期根据调用函数提供的实参列表去确定调用哪个重载版本
条款42:了解typename的双重意义
- 在模板的模板参数列表处使用typename或class均可;
- 在模板内,如果某个名字依赖于模板参数,编译器会默认不把它当作一个类型名,如果这确实是个类型名就需要我们加typename告诉编译器;总之,目的就是为了让编译器能知道模板内的每一个名字都代表什么,而在继承的基类列表或成员初值列处的名字,编译器很明显能判断出来这里的名字代表什么,因此就无需我们typename