Item 44:将与参数无关的代码抽离templates
2017-03-28 18:57
218 查看
template为每一个模板参数生成一份代码,可能会造成代码膨胀。模板参数分为类型参数和非类型参数,通常非类型参数比较容易造成代码膨胀,例如下面一个例子:
非类型参数就是这样轻易地造成了代码膨胀。
正确的做法类似这么一种思想:当你编写某一个函数时,而你明白其中的某一部分实现和另一个函数的代码本质相同,你会抽取出两个函数的共同部分,把它放入第三个函数里,然后令原先的两个函数调用这个新的函数
不过其实类型参数也会导致代码膨胀。例如在许多平台上,int和long有相同的二进制表述,所以像vector和vector的成员函数有可能完全相同,这正是膨胀的定义。又如,在大多数平台上,所有指针类型都有相同的二进制表述,因此凡template持有指针者(例如list
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
相关文章推荐
- Effective C++ Item 44 将与参数无关的代码抽离 templates
- 《Effective C++》读书笔记之item44:将与参数无关的代码抽离templates
- [翻译] Effective C++, 3rd Edition, Item 44: 从 templates(模板)中分离出 parameter-independent(参数无关)的代码(下)
- 【44】将与参数无关的代码抽离templates
- 条款44:将与参数无关的代码抽离templates
- Effective C++ Item 44 将与參数无关的代码抽离 templates
- 条款44:将与参数无关的代码抽离templates
- [翻译] Effective C++, 3rd Edition, Item 44: 从 templates(模板)中分离出 parameter-independent(参数无关)的代码(上)
- Effective C++ -----条款44:将与参数无关的代码抽离templates
- 读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来
- C++之将与参数无关的代码抽离templates(44)---《Effective C++》
- effective C++ 条款 44:将与参数无关的代码抽离templates
- 读书笔记《Effective C++》条款44:将与参数无关的代码抽离template
- Effective C++学习_条款44:将与参数无关的代码抽离
- Item 44:将参数无关代码重构到模板外去
- Effective C++ 44条 将与参数无关的代码抽离templates
- Item 44:将参数无关代码重构到模板外去
- C++ - 将参数无关的代码抽离模板(templates)
- Effective C++:条款44:将与参数无关的代码抽离template