模板特化降低代码膨胀
2008-02-03 21:56
211 查看
以下内容根据TC++PL 13.5 Specialization一节。
考虑定义了模板Vector<T>之后,我们可以定义
Vector<int *>
Vecotr<char *>
Vector<Shape *>
等。
Vector<T>的所有操作,对int *, char *等各种类型都要生成一份代码,
例如Vector<T>::swap(),最终代码里就会有Vector<int *>::swap(),
Vector<char *>::swap()等,所有这些swap()的执行代码几乎是完全一
样的,唯一的区别是其中的数据类型是不同的指针,生成的二进制代码
是完全一样的。这就造成了浪费。
采用Specialization,先定义Vector<void *>,再以如下方式偏特化:
Vector<int *> : private Vector<void *>
Vector<char *> : private Vector<void *>
Vector<Shape *>: private Vector<void *>
等。
这样,Vector<T *>的所有操作,都可以通过Vector<void *>来完成。
例如所有的Vector<T *>::swap()都可以调用Vector<void *>::swap()
完成。Vector<T*>的操作只是给Vector<void *>增加了一层类型转换,
而没有增加新的代码,这一层转换会被编译器优化掉。最终二进制代码
中,就不会有Vector<int *>:swap(),Vector<char *>::swap()等了,
只有Vector<void *>::swap()的一份代码。减少了浪费。
TC++PL里面讲的很清楚了,应该仔细多读读,有这么好的书不好好利用,
实在是浪费。
考虑定义了模板Vector<T>之后,我们可以定义
Vector<int *>
Vecotr<char *>
Vector<Shape *>
等。
Vector<T>的所有操作,对int *, char *等各种类型都要生成一份代码,
例如Vector<T>::swap(),最终代码里就会有Vector<int *>::swap(),
Vector<char *>::swap()等,所有这些swap()的执行代码几乎是完全一
样的,唯一的区别是其中的数据类型是不同的指针,生成的二进制代码
是完全一样的。这就造成了浪费。
采用Specialization,先定义Vector<void *>,再以如下方式偏特化:
Vector<int *> : private Vector<void *>
Vector<char *> : private Vector<void *>
Vector<Shape *>: private Vector<void *>
等。
这样,Vector<T *>的所有操作,都可以通过Vector<void *>来完成。
例如所有的Vector<T *>::swap()都可以调用Vector<void *>::swap()
完成。Vector<T*>的操作只是给Vector<void *>增加了一层类型转换,
而没有增加新的代码,这一层转换会被编译器优化掉。最终二进制代码
中,就不会有Vector<int *>:swap(),Vector<char *>::swap()等了,
只有Vector<void *>::swap()的一份代码。减少了浪费。
TC++PL里面讲的很清楚了,应该仔细多读读,有这么好的书不好好利用,
实在是浪费。
相关文章推荐
- Code review(代码审查) 能给我们降低这么多开发成本,你信吗?
- as3加密入门-3降低反编译代码可读性的代码书写习惯
- [Code Health]减少嵌套,降低代码复杂度
- 如何无痛降低 if else 面条代码复杂度
- 【第1076期】 如何无痛降低 if else 面条代码复杂度
- 泛型就意味着代码膨胀?
- C++中如何正确使用include来降低代码的耦合度
- 源码推荐(12.28B):降低代码耦合快速开发框架,一句代码将图片切成两张
- 代码健康: 减少嵌套, 降低复杂性
- OpenCV膨胀和腐蚀示例代码
- [介绍] SymbolSort, 帮你避免或减少代码膨胀 (Code Bloat)
- 用预置模板降低JS代码与HTML结构的耦合
- 贴个MyGenerator的NHibernate所需代码模板,降低些初学门槛!
- 写高质量OC代码52建议总结:34.以“自动释放池块”降低内存峰值
- STM32峰会:机智云MCU代码开发工具降低智能硬件开发成本
- 下面哪些特性可能导致代码体积膨胀:----腾讯2016研发工程师在线模拟笔试题
- android downsample降低音频采样频率代码
- D3D9黑屏优化大幅降低CPU占用率代码
- 请朋友帮忙优化一下下面的代码,降低其时间复杂度。。。
- 指针类 目的:使代码干净,降低了一点效率