找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 386|回复: 0

[【推荐】] C++ template来实现virtual function的静态绑定心得

[复制链接]
发表于 2009-12-9 18:02:29 | 显示全部楼层 |阅读模式
问题描述:

用C++的Virtual来定义界面在系统设计时是非常方便的。但是有个麻烦是,如果调用的类,使用base class指针访问函数的话,是通过virtual method table来访问的,dynamic binding,这降低call的效率,增加代码,危害stack,而且把编译器可能进行的inline优化和其他一些优化都干掉了。我看了一些资料说平均效率降低6-13%,有时可达50%,这还没算代码空间的膨胀,这点对单片机来讲也挺致命的。

解决方法:

所以我在想是否能用C++的template特性来解决这个问题。把界面使用者类中的界面类指针成员的类型用template参数传进去,它可能是任何一个实现界面(继承基类)的子类,这样编译器就可以实现所有调用的静态绑定。事实上我根本不需要动态绑定。但是我仍然喜欢定义清晰的界面而不是用宏来做替换,因为(1)这样仍然有类型检查,Virtual对编译器来说要保证子类正确,而只是重载就乱套了。(2)一个Interface会在编译时就被多次使用。不同的Caller透过Interface调用的子类可能不同,用宏我搞不懂怎么能在编译时实现静态结构的“多个实例”。

但是我不知道这样搞有什么副作用没有?毕竟代码用不用Template写形式上差异极大。一但这么写了,日后要改就麻烦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-19 15:01 , Processed in 0.283905 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表