简解ATL(一)

ATL,ActiveX Template Library,是c++的一套模板库。主要用于开发 COM,ActiveX。

 

其出现的一部分原因也在于 MFC 过于庞大冗余,MFC 创建 COM 组件代码冗余量大,且有时候需要其运行时库的支持。而 MFC 因为其实现的功能很强大,其运行时库也就会很庞大,而 COM 不得已要加载这样的库文件,必然会使性能降低,如果在网络上传输,其还需要浏览器支持运行时库。

可见,MFC 对于提供网络应用,显得有点捉襟见肘了。于是,ATL 应运而生。

 

理解 ATL 的技术还是比较有意思的,最好拿来源码看看。

 

 

潘爱民关于《ATL Internals》的书评:
ATL是一个产生C++/COM代码的框架,就如同C语言是一个产生汇编代码的框架;
ATL 又不同于MFC,它完全面向COM组件,其技术路线也不同于MFC,MFC使用的是C++中的继承、封装、嵌套等常规技术,而ATL使用了C++ 中模板、多继承等高级技术,甚至还用到了STL。

 

 

ATL中所使用的基本技术包括以下几个方面:
   COM技术  
   C++模板类技术(Template)
     C++多继承技术(Multi-Inheritance)

 

COM技术是理解ATL的基础,使用ATL进行开发要对COM技术的基本概念有最低限度的了解。

 

作为ATL最核心的实现技术的模板是对标准C++语言的扩展,但是在大多数的C++编程环境中,人们很少使用它,这是因为模板的功能虽然很强,但是它内部机制比较复杂,需要比较多的C++知识和经验才能灵活地使用它。在MFC中的CObjectArray等功能类就是由模板来定义的。完全通过模板来定义程序的整体类结构,ATL是迄今为止做得最为成功的。

 

模板类定义的是类的构造方式,使用模板类定义实例化的结果产生的是不同的类。因此可以说模板类是“类的类”。

 

 

使用模板类

 

 

多继承技术同模板一样,是C++语言中极具争议性的技术。使用多继承技术可以使程序的设计和实 现更加灵活,但是,由于多继承的复杂性和自身概念上的一些问题,使多继承在各种面向对象的语言环境中得到的支持都非常有限。例如Small Talk根本就不允许多继承,同样MFC也不支持多继承技术。
多继承最大的问题是所谓的“钻石结构”。

 

 

由于类D同时从类C和B继承,而类C和类B 分别继承了类A,因此在下面的语句中就会发生歧义:

 

 

 

ATL使用了C++最新规范中加入的两个运算符号 static_cast、dynamic_cast代替简单的强制转化,从而消除多继承带来的歧义。(又遇到这个了~~这个很难很难不想理解的问题。)

 

 

为什么模板类和多继承技术会成为ATL主要的工具呢?原因在于,采用模板可以在编译过程中快速的生成具有用户定制功能的类,这对于COM这样一个复杂的技术体系在实现效率上得到了很大的提高。通过使用模板类,用户可以把精力集中在自己开发的类的基本逻辑上,在完成了自己的类的设计以后,通过继承不同的类,生成不同的模板类,就可以快速地实现COM的功能,同时又避免了采用单继承结构造成的大量功能冗余。

 

 

ok,就这样了。基本先了解下。去下文档,回来写工程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值