Effective C++ 读书笔记 Item 44
来源:互联网 发布:ib课程网络教学 编辑:程序博客网 时间:2024/04/30 01:34
Item 44: Factor parameter-independent code out of templates.
这个Item主要讲由于使用模板造成的代码区膨胀的问题。常见的一种情况是使用了non-type模板参数。例如
template<typename T, std::size_t n>class SquareMatrix { ... void invert();};SquareMatrix<double, 5> sm1;SquareMatrix<double, 10> sm2;于是c++编译器会给生成SquareMatrix<double, 5>::invert和SquareMatrix<double, 10>::insert两个版本的函数。
解决办法是再写一个基类,在基类中写一个参数为std::size_t的invert函数,然后在SquareMatrix中调用insert(size_t n)函数,并讲invert()设置为inline,这样就只会编译有一个版本的invert()函数。
template<typename T> class SquareMatrixBase { protected: SquareMatrixBase(std::size_t n, T* pMem) :size(n), pData(pMem) {} void setDataPtr(T* ptr) { pData = ptr; } void insert(); //不能inline,否则仍然生成多个版本。 ... private: std::size_t size; T* pdata; }; template<typename T, std::size_t n> class SquareMatrix: private SquareMatrixBase<T> { //private继承只需要继承实现 private: using SquareMatrixBase::invert; public: SquareMatrix() : SquareMatrixBase<T>(n, data) {} //不清楚为什么data能在初始化之前传给父类。 应该是地址已经确定,但是内容没有初始化 void invert() { invert(n); } // 用inline提高效率 private: T data[n*n]; }
好处在于代码段的减少有助于提高指令集的cache
对于type的模板参数,可以对相同的binary representations的类型共享代码。 T* function calls void* function
- Effective C++ 读书笔记 Item 44
- Effective-Objective-C-读书笔记-Item-1
- Effective-Objective-C-读书笔记-Item-2
- Effective-Objective-C-读书笔记-Item-3
- Effective C++ 读书笔记 Item 45
- Effective C++ 读书笔记 Item 46
- Effective C++ 读书笔记 Item 47
- Effective C++ 读书笔记 Item 48
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《Effective c++》读书笔记
- 《more effective c++》读书笔记
- <<effective c++>> 读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- Effective C++(1)读书笔记
- Effective C++(2)读书笔记
- 《Effective C++》读书笔记
- 当使用hql进行投影查询时对于外键为空的记录查询不出来的问题
- Eclipse/MyEclipse Java注释模板设置详解 ---转载自百度空间
- 20111228晴
- 数据库系统原理----笔记整理系列
- 图文详解Android模拟器的使用
- Effective C++ 读书笔记 Item 44
- java设计模式 命令模式的优点
- xmanager 远程登录ubuntu 11.10 无法显示工具栏
- iptables
- 手机CMWAP和CMNET上网
- hdoj 2067 小兔的棋盘【水】【dp】
- Ext在IE8浏览器下 左边tree加载模块到中间面板不能显示,报‘events’为空或不是对象错误
- 趣味算法-城市之间最短总距离
- Designing Data Storage Architecture - Understanding Block Blobs and Page Blobs