05月12, 2008

C++设计模式的新形式

最近再看WTL。C++模板带来的设计模式实现的改变,的确没那么容易很快接受。慢慢来吧。

上面是一个实验:一个采用继承实现多态,另一个采用模板实现的多态。 前者称为动多态(Dynamic Polymorphism),后者称为静多态(Static Polymorphism)

下面是汇编代码上的差别,静多态没有使用虚函数,所以代码要少一些。

动多态Imple* impl所指类型是在运行期时确定的,上图中多出的代码就是通过虚函数表查找合适的函数指针。静多态的这个确定过程是在编译期完成的。编译器会用模板参数(TA,TB)代替Impl,从而生成的代码直接指向被调用的函数,也没有虚函数表的查找过程。

从类图上来看,静多态是平面的,不像动多态有继承层次。这也是习惯了OO思想后不容易理解的。

本文链接:http://aztack.wang/post/desigin-pattern-w-tpl-in-cpp.html

-- EOF--

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。