Effective C++ 阅读笔记 08:模板和泛型编程(上)

本文探讨了C++中的隐式接口和编译时多态性,强调模板的接口不同于类的显式接口,它是基于类型的。同时解释了typename的双重意义,不仅用于模板声明,还用于解决嵌套从属类型名的解析问题。此外,介绍了如何在模板派生类中正确调用基类成员。最后,文章提到了避免模板代码膨胀的策略,通过分离与模板参数无关的代码来优化编译结果。

条款41:了解隐式接口和编译多态性

请记住

  • 类和模板都支持接口和多态。
  • 类的接口是显式的,多态由virtual函数提供,发生于运行期。
  • 模板的接口是隐式的,基于有效表达式,多态在编译期完成。

我的理解

模板的接口是隐式的,它在编译期完成


条款42:了解typename的双重意义

请记住

  • 声明template时,前缀关键字class和typename可以互换。
  • 在函数体中,请用typename声明嵌套从属类型名。

我的理解

在函数体中,要用typename声明嵌套从属类型名,不然编译器不知道它到底是个类型,还是别的什么。


条款43:学习处理模板化基类内的名称

请记住

  • 在派生模板类需要调用模板基类的函数时,加上this->

我的理解

照做就行了,不照做编译通过不了


条款43:学习处理模板化基类内的名称

请记住

  • 在派生模板类需要调用模板基类的函数时,加上this->

我的理解

照做就行了,不照做编译通过不了


条款44:将与参数无关的代码抽离templates

请记住

  • Template生成多个classes与多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系。
  • 因非类型模板参数而造成的代码膨胀,往往可以消除,做法是以函数参数或者class成员变量替换template参数。
  • 因类型而造成的代码膨胀,也可以降低,做法是让带有完全相同二进制表述的具现类型共享实现码。

我的理解

确实如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值