Effective C++学习笔记(十二) 模板与泛型编程(一)

Effective C++学习笔记(十二) 模板与泛型编程(一)

条款 41 了解隐式接口和编译期多态
以不同的template参数具现化function template 会导致调用不同的函数,这便是所谓的编译期多态。
隐式接口并不基于函数签名式,而是由有效表达式组成;
class和template都支持接口和多态
对class而言接口是显式的,以函数签名为中心,多态则是通过virtual函数发生于运行期。
对template参数而言,接口是隐式的,基于有效表达式,多态则是通过template具现化和函数重载解析发生在编译期。

条款 42 了解typename的双重意义
声明template参数时,前缀关键字class和typename可互换
请使用关键字typename标识嵌套从属类型名称;但不得在base class lists(基类列)或member initialization list(成员初值列)内以它作为base class修饰符

条款 43 学习处理模板化基类内的名称
如果一个模板类的父类也是一个模板类,那么在此子类模板类中调用父类的成员会被编译器拒绝,因为不能保证父类的具现化中就一定含有此成员,某些特化版本可能不含有此成员,所以编译器选择拒绝。解决这个问题的方法有三种:
(1)使用this指针进行调用
(2)使用using 声明
(3)明确指出使用父类的该成员 base::function()
尽管能通过编译,但是也要在编译的时候注意调用是否合理

条款 44 将与参数无关的代码抽离template
因非类型模板参数造成的代码膨胀,往往可以消除,做法时以函数参数或者class成员变量替换template参数
因类型参数而造成的代码膨胀,往往可降低,做法时让带有完全相同二进制表述的具现类型共享实现码。

条款 45 运用成员函数模板接受所有兼容类型
请使用 member function template(成员函数模板)生成“可接受所有兼容类型”的函数
如果你声明member template 用于“泛化copy构造”或“泛化assignment操作”,你还是需要声明正常的copy构造函数和copy assignment 操作符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值