C++ 扩展动态编程

来源:互联网 发布:企业宣传册制作软件 编辑:程序博客网 时间:2024/05/21 04:21
       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;
};
原创粉丝点击