C++ 扩展动态编程

       C++规范不支持当前流行的动态编程(这是出于效率的性能考虑,使用的是早绑定的技术,在编译的时候内容就已经确定下来,运行时刻进行改变确实是一个痛苦的事情),但是这并不影响我们的程序设计。事实上,动态编程中,如.net平台里已经指出,是通过丰富的元数据支持来获得更加多的高级特性,与java相比,似乎更为丰富,更具有高级特性。
       在了解到动态性能的获得是通过元数据解决之后,我们可以进行这样的一种设计,通过另外设计一个结构,专门用于提供类型信息。而用一个类工厂进行维护一个固定的vtable表,同时提供一个固定接口给客户使用,这样在需要迟绑定时,通过该接口进行查询相关的函数,由于是固定的vtable表,因此结果是很容易获得的。主要的设计基础就是描述类型信息的类结构以及提供的访问接口和固定vtable表。
      具体的实现方案可以参考微软的COM的IDispatch的设计思想。虽然我们没有在每个类的二进制机构里加入了动态的类型信息以及元数据系统,但是通过这样的机制,我们确实扩展了C++模型,并用于动态编程,更为重要的是我们并没有损失效率。

微软的IDispatch接口:
class IDispatch: public IUnknown{
    public:
       virtual HRESULT GetTypeInfoCount(UINT * pctinfo)=0;
       virtual HRESULT GetTypeInfo(UINT iTInfo,LCID lcid,ITypeInfo ** ppTInfo)=0;
       virtual HRESULT GetIDsOfNames(REFIID riid,LPOLESTR * rgszNames,UINT cNames,
                                LCID lcid, DISPID *rgDispId)=0;
       virtual HRESULT Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,
                               DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,
                               UINT *puArgErr)=0;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值