ATL中的多继承模板类,不是为了同类功能的扩展,而是为了某类功能的添加。
2013-09-29 02:18
295 查看
ATL中的多继承模板类,不是为了同类功能的扩展,而是为了某类功能的添加。
这些模板类具有某方面的通用功能,通过修改参数<CA5>来具体化实现类 - public CComCoClass<CA5, &CLSID_A5>。
这样CA5通过继承不同种类的具体化实现类,来扩展不通的功能。
这样就可以集中精力在开发类(CA5)的基本逻辑上,在完成了类(CA5)的实现后,通过继承不同模板类的生成具体的类,就可以快速实现COM的功能。
ATL是ActiveX template library的缩写,它是一套C++模板库。
ATL的核心就是由几十个不同功能的模板类构成的。通过多继承来不断组合这些功能类,来扩展程序功能。
// CA5
class ATL_NO_VTABLE CA5 :
public CComObjectRootEx<CComSingleThreadModel>, // 增加对不同线程方式的支持
public IDispatchImpl<IA5, &IID_IA5, &LIBID_ALib, /*wMajor =*/ 1, /*wMinor =*/ 0>, // 增加脚本支持
public IOleControlImpl<CA5>,
public IOleObjectImpl<CA5>,
public IOleInPlaceActiveObjectImpl<CA5>,
public IViewObjectExImpl<CA5>,
public IOleInPlaceObjectWindowlessImpl<CA5>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CA5>, // 增加连接容器功能
public CProxy_IA5Events<CA5>, // 增加连接点功能,负责Fire_
public IQuickActivateImpl<CA5>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CA5>,
#endif
public IProvideClassInfo2Impl<&CLSID_A5, &__uuidof(_IA5Events), &LIBID_ALib>,
public CComCoClass<CA5, &CLSID_A5>, // 可创建
public CComControl<CA5>
{
这些模板类具有某方面的通用功能,通过修改参数<CA5>来具体化实现类 - public CComCoClass<CA5, &CLSID_A5>。
这样CA5通过继承不同种类的具体化实现类,来扩展不通的功能。
这样就可以集中精力在开发类(CA5)的基本逻辑上,在完成了类(CA5)的实现后,通过继承不同模板类的生成具体的类,就可以快速实现COM的功能。
ATL是ActiveX template library的缩写,它是一套C++模板库。
ATL的核心就是由几十个不同功能的模板类构成的。通过多继承来不断组合这些功能类,来扩展程序功能。
// CA5
class ATL_NO_VTABLE CA5 :
public CComObjectRootEx<CComSingleThreadModel>, // 增加对不同线程方式的支持
public IDispatchImpl<IA5, &IID_IA5, &LIBID_ALib, /*wMajor =*/ 1, /*wMinor =*/ 0>, // 增加脚本支持
public IOleControlImpl<CA5>,
public IOleObjectImpl<CA5>,
public IOleInPlaceActiveObjectImpl<CA5>,
public IViewObjectExImpl<CA5>,
public IOleInPlaceObjectWindowlessImpl<CA5>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CA5>, // 增加连接容器功能
public CProxy_IA5Events<CA5>, // 增加连接点功能,负责Fire_
public IQuickActivateImpl<CA5>,
#ifndef _WIN32_WCE
public IDataObjectImpl<CA5>,
#endif
public IProvideClassInfo2Impl<&CLSID_A5, &__uuidof(_IA5Events), &LIBID_ALib>,
public CComCoClass<CA5, &CLSID_A5>, // 可创建
public CComControl<CA5>
{
相关文章推荐
- C++编程规范之37:公用继承即可替换性。继承,不是为了重用,而是为了被重用
- 创新不是添加新功能 而是做符合市场定位的产品
- WebUI组件的设计目标:不是功能齐全,而是结构合理易于扩展、体积小巧
- 人在做坏事的时候,总希望给自己找理由。这些理由,也许虚伪,也许可笑,但并不是为了说服别人,而是说服自己。
- 继承与合成基本概念 继承:可以基于已经存在的类构造一个新类。继承已经存在的类就可以复用这些类的方法和域。在此基础上,可以添加新的方法和域,从而扩充了类的功能。 合成:在新类里创建原有的对象称为合成。
- 黄聪:wordpress如何扩展TinyMCE编辑器,添加自定义按钮及功能
- 很多时候,努力并不是为了得到奖赏,而是为了被认同。
- 通过继承扩展子类的功能
- asp.net继承IHttpHandler接口实现给网站图片添加水印功能实例
- 地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类
- 努力和上进不是为了做给别人看,而是为了不辜负自己
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
- 二十六、继承(九)通过继承 进行扩展:添加 新的个体变量
- 扩展ExtJs 4.2.1 htmleditor 添加图片功能
- 为了使这个Bloger功能不是特别的冷清,发个文章占一下space
- 扩展微软DDK中的NDIS IM驱动的功能:添加一个DeviceIoControl接口
- JBPM的扩展-添加工作移交的功能
- C++多继承的好处是增加了弹性和灵活性,Delphi类强迫单继承TObject是为了提供许多强大功能
- C#用扩展方法进行自动生成添加删除对象转换的功能