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

template为每一个模板参数生成一份代码,可能会造成代码膨胀。模板参数分为类型参数和非类型参数,通常非类型参数比较容易造成代码膨胀,例如下面一个例子:

template<typename T, std::size_t n>
class SquareMatrix{
  public:
    ...
      void invert();    //求逆矩阵
};
SquareMatrix<double, 5> sm1;
SquareMatrix<double, 10> sm2;
sm1.invert();   //调用SquareMatrix<double, 5>::invert
sm2.invert();   //调用SquareMatrix<double, 10>::invert

非类型参数就是这样轻易地造成了代码膨胀。
正确的做法类似这么一种思想:当你编写某一个函数时,而你明白其中的某一部分实现和另一个函数的代码本质相同,你会抽取出两个函数的共同部分,把它放入第三个函数里,然后令原先的两个函数调用这个新的函数
不过其实类型参数也会导致代码膨胀。例如在许多平台上,int和long有相同的二进制表述,所以像vector和vector的成员函数有可能完全相同,这正是膨胀的定义。又如,在大多数平台上,所有指针类型都有相同的二进制表述,因此凡template持有指针者(例如list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值