《Effective C++》学习笔记——条款44




七、模板与泛型编程


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




template

Template是节省时间和避免代码重复的一个奇妙的方法。
你只需要键入一个class template,剩下的就可以留给编译器去具现化那些相关类和函数。

  • class templates的成员函数只有在被使用时才被暗中具现化,所以只有被具现化的所有函数都使用一遍,你才会获得所有函数。

Function templates也差不多,只需要写一个function template,然后就可以让编译器去干剩下的活了。


但是,使用templates可能会导致代码膨胀:其二进制码带着重复的代码、数据或两者都有。
所以,需要知道如何避免这样的错误 —— 共性与变性分析

  • 对于函数:
    分析两个函数,找出共同的部分和变化的部分,把共同的部分搬到一个新函数去,保留了两个函数,找出共同的部分和变化的部分,把共同部分搬到一个新函数去,保留变化的部分在原函数中不动。
  • 对于类:
    同函数,令原先的classes取用共同特性,而原classes的互异部分仍然在原位置不动。
  • 对于template:
    在non-template代码中,重复十分明确:你可以看到两个函数或两个classes之间有所重复;在template代码中,重复隐晦的,毕竟只存在一份template源码,所以必须训练自己去感受当template被具现化多次时可能发生的重复。


一个例子

想为固定尺寸的正方矩阵编写一个template。该矩阵的性质之一是支持矩阵的逆运算。

// template支持 n x n 矩阵,元素是类型为T的objects
template<typename 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值