Effective C++(15)

条款44 Factor parameter-independent code out of templates

将与参数无关的代码抽离template

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

条款45 Use member function templates to accept "all compatible types."

使用成员函数模板接收所有兼容类型

对于smartptr(智能指针),如果以带有base-derived 关系的B,D两类型分别具现化某个template。 产生出来的两个具现体并不带有base-derived关系,所以此时无法进行隐式的类型转换。如果希望他们可以这么做,必须明确写出来。但是继承关系可以随时更新,无穷无尽,所以就有了以下解决办法。

为smartptr写一个模板构造函数,可以根据SmartPtr<U>生成一个SmartPtr<T>

遵循其他智能指针中的get函数返回一个其原始指针

如果你声明 membertemplates 用于"泛化copy构造函数"或"泛化copy assignment操作",你还是需要声明正常的copy构造函数和copy assignment操作符。

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

需要类型转换时请为模板定义非成员函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值