Effective C++ 阅读笔记·Templates and Generic Programming

Templates 及泛型编程的世界,与面向对象有根本上的不同。在此世界中显示接口和运行期多态仍然存在,但重要性低;隐式接口和编译器多态更为重要。

41 Understand implicit interfaces and compile-time polymorphism

  • 加诸于template参数身上的隐式接口,就像加诸于class对象身上的显式接口一样真实,而且两者都在编译器完成检查;
  • classestemplates都支持接口和多态;
  • classes而言是显式的,以函数签名为中心。多态则是通过virtual函数发生于运行期;
  • template参数而言,接口是阴式的,奠基于有效表达式。多态则是通过template具现化和函数重载解析发生于编译期;

42 Understand the two meanings of typename

  • 任何时候当你想要在template中指涉一个嵌套从属类型名称,就必须在紧邻它的前一个位置放上关键字typenametypename不可以出现在base classes list内的嵌套从属类型名称前,也不可在成员初始列中作为base class修饰符;
  • typename只被用来验明嵌套从属类型名称,其他名称不该有它存在;
  • 声明template参数时,前缀关键字classtypename可以互换;

43 Know how to access names in templatized base classes

  • 可在derived class template内通过“this->”指涉base class templates内的成员名称,或藉由一个明白写出的“base class资格修饰符”完成;

44 Factor parameter-independent code out of templates

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

45 Use member function templates to accept “all compatible types”

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

46 Define non-member functions inside templates when type conversions are desired

  • 当我们编写一个class template,而它所提供之“与此template相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“class template内部的friend函数”;

47 Use traits classes for information about types

  • Traits class使得类型相关信息可以在编译期可用,它们以templatetemplate特化完成实现;
  • 整合重载技术后,traits classes有可能在编译期对类型执行if-else测试;

48 Be aware of template metaprogramming

  • Template metaprogrammingTMP,模板元编程)可将工作由运行期转移到编译期,因而得以实现早期错误侦测或者更高的执行效率;
  • TMP可被用来生成“基于政策选择组合”(based on combinations of policy choices)的客户定制代码,也可以用来避免生成对某些特殊类型并不适合的代码;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值