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

模板特化降低代码膨胀

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里面讲的很清楚了,应该仔细多读读,有这么好的书不好好利用,
实在是浪费。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: