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;
};
在了解到动态性能的获得是通过元数据解决之后,我们可以进行这样的一种设计,通过另外设计一个结构,专门用于提供类型信息。而用一个类工厂进行维护一个固定的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;
};
- C++ 扩展动态编程
- 用php的c扩展编程调用 c程序的动态链接库
- 用php的c扩展编程调用 c程序的动态链接库
- (Python编程)C扩展概览
- C#-动态编程
- C/C++使用Lu扩展动态库
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL 1
- VC++动态链接库编程之MFC扩展 DLL 2
- VC++动态链接库编程之MFC扩展 DLL 3
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL
- VC++动态链接库编程之MFC扩展 DLL
- vb.net常用函数
- (转)计算机专业毕业生大调查:毕业了向哪儿走?
- 关于delphi指针
- Oracle索引创建原则
- 追MM | 设计模式 ???
- C++ 扩展动态编程
- Apache创始人和开源软件
- 在线HTML编辑器htmlarea简单使用
- 数据库设计规范(命名规范)
- 靠!龙书第二版两天前上架了
- DataGridView数据邦定方式的改变
- apache xerces c++ windows 下编译与vc6实例
- 垃圾在开发winfrom下动态菜单遇到的问题
- 破解网站发布系统 ASP生成静态页面方法