您的位置:首页 > 编程语言

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

2017-03-28 18:57 218 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  templates effective-c++