【44】将与参数无关的代码抽离templates
1、template是产生代码的代码,这就意味着源码看起来很少,生成的目标码大量膨胀。
2、考虑,如果两个方法有重复代码,我们会新建一个方法,把重复的代码放进去,原先两个方法调用第三个方法。如果两个类有重复代码,我们把重复代码移到一个新的类中,通过继承或者复合,避免重复。
3、但是在template中,这种重复是隐晦的,只有一份template代码,可能会生成一系列重复的代码。考虑矩阵模板类,有两个模版形参:矩阵元素的类型T和矩阵的大小S。
4、SquareMatrix<double,5> 和SquareMatrix<double,10> 会实例化两个模板类,这两个模板类有大量重复代码,比如:invert方法。
5、如何解决呢?
建立一个模版父类,把重复的代码放在模版父类中,也就是不再带有矩阵大小S,模版子类增加一个矩阵大小S,同时向父类传递一个指针,指向矩阵的数据,调用模版父类的代码,invert(int size, matrix* pMatrix).
【44】将与参数无关的代码抽离templates的更多相关文章
- Effective C++ -----条款44:将与参数无关的代码抽离templates
		Templates生成多个classes和多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系. 因非类型模板参数(non-type template para ... 
- [EffectiveC++]item44:将与参数无关的代码抽离templates
- 读书笔记_Effective_C++_条款四十四:将与参数无关的代码抽离template
		标题上说“将与参数无关的代码抽离template”,这里的参数既可以指类型,也可以是非类型,我们先来看看非类型的情况. 假定我们要为矩阵写一个类,这个矩阵的行列元素个数相等,是一个方阵,因而我们可以对 ... 
- 读书笔记 effective c++ Item 44  将与模板参数无关的代码抽离出来
		1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法.你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定 ... 
- item44:将与参数无关的代码抽离template
		编写non-template代码中,重复十分明显:可以很直观的看到代码的重复,然后将它们写成一个新的class或者函数,然后供调用. 编写template代码中,重复是隐晦的:只存在一份templat ... 
- Effective C++ Item 44 将与參数无关的代码抽离 templates
		本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:Templates 生成多个 classes 和多个函数,所以不论什么 templat ... 
- 条款44:将与参数无关的代码剥离template
		使用template时,不小心的时候可能就会带来代码膨胀的问题: template<typename T, std::size_t n> class SquareMatrix{ publi ... 
- JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)
		一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ... 
- HttpClient_使用httpclient必须知道的参数设置及代码写法、存在的风险
		结论: 如果使用httpclient 3.1并发量比较大的项目,最好升级到httpclient4.2.3上,保证并发量大时能抗住.httpclient 4.3.3,目前还有一些bug:还是用4.2.x ... 
随机推荐
- 开源布局控件  WeifenLuo.WinFormsUI.Docking.dll使用
			WeifenLuo.WinFormsUI.Docking是一个很强大的界面布局控件,可以保存自定义的布局为XML文件,可以加载XML配置文件.! 先看一下效果 使用说明: 1.新建一个WinForm程 ... 
- 新版本的tlplayer for android ,TigerLeapMC for windows发布了
			tlplayer for android 新版本修正了图像倾斜等等问题,增加了动态水印功能. 支持hls(m3u8),http,rtsp,mms,rtmp等网络协议. 声明tlplayer 上的变速不 ... 
- Ubuntu安装已经下载好的文件包
			默认的文件下载都在 ~/Downloads 文件夹里面. 按 ctrl+alt+t 打开命令. 1.解压下载好的文件包,如: tar -xvf Sublime\ Text\ 2.0.2.tar.bz2 ... 
- 转 Android adb root权限
			永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb pus ... 
- [原]Unity3D深入浅出 - GUI控件
			Unity的GUI类提供了丰富的界面控件,通过组合这些控件,完成和用户交互的界面. Lable:绘制文本和图片 Box:绘制一个图形框 Button:绘制一个响应单击事件的按钮 RepeatButto ... 
- linux tmp75 /dev/i2c-* 获取数据 demo
			/********************************************************************** * linux tmp75 /dev/i2c-* 获取数 ... 
- easyui资源
			官网地址:http://www.jeasyui.com/index.php(相关文档示例,有demo, tutorial, documentation) 未混淆的源码:http://jquery-ea ... 
- 淘宝JAVA中间件Diamond详解(2)-原理介绍
			淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ... 
- DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建
			作者 关劲松 delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况.因此需要自行编写一个 ... 
- jQuery mobile 核心功能
			原文地址:http://jquerymobile.com/demos/1.0b2/#/demos/1.0b2/docs/about/features.html 基于 jQuery 核心,使用和jQue ... 
