史上最简练的effective c++(条款41-48)模板与泛型编程
条款41-了解隐式接口和编译期多态
隐式接口,即是template的接口,在编译期才生成具体函数,多态也基于表达式的具体函数生成
条款42-了解typename的双重意义
关键字typename 用来标识嵌套从属名称
学习处理模板化基类内的名称
承诺基类所有实现均具有该方法:(包括泛化版和特化版)
- 使用this
- using
- 直接指明调用发生于基类
最终没实现还是不能通过编译
条款44-将与参数无关的代码抽离template
非类型模板参数和类型模板参数均会造成代码膨胀,前者可以以函数参数或者成员变量替换,后者让相同二进制表述的具体类型共享实现码(特化)
条款45-运用成员函数模板接受所有兼容类型
模板类型参数符合继承关系,生成的模板类并不能相互转换,只有运用成员函数模版显示实现构造,复制构造函数才行。
条款46-需要类型转换时请为模板定义非成员函数
template实参推导过程中从不把隐式类型转换函数纳入考虑,在模板类内定义friend 函数,在模板实例化时,friend函数也被实例化,由于是函数,于是可以进行隐式转换。
条款47-请使用traits classes 表现类型信息
现在都用decltype了