STL,ATL,WTL之间的联系和区别

STL即 Standard Template Library (标准模板库)  html

      STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工做时所开发出来的。如今虽然说它主要出如今C++中,但在被引入C++以前该技术就已经存在了很长的一段时间。 
       STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎全部的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来讲提供了更好的代码重用机会。linux

      从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其余一些组件的集合。这里的“容器”和算法的集合指的是世界上不少聪明人不少年的杰做。
算法

    STL的目的是标准化组件,这样你就不用从新开发它们了。你能够仅仅使用这些现成的组件。STL如今是C++的一部分,所以不用额外安装什麽。它被内建在 你的编译器以内。由于STL的list是一个简单的容器,因此我打算从它开始介绍STL如何使用。若是你懂得了这个概念,其余的就都没有问题了。另外,list容器是至关简单的,咱们会看到这一点。
这篇文章中咱们将会看到如何定义和初始化一个list,计算它的元素的数量,从一个list里查找元素,删除元素,和一些其余的操做。要做到这些,咱们将会讨论两个不一样的算法,STL通用算法都是能够操做不止一个容器的,而list的成员函数是list容器专有的操做。编程

 

     STL容器能够保存对象,内建对象和类对象。它们会安全的保存对象,并定义咱们可以操做的这个对象的接口。放在蛋架上的鸡蛋不会滚到桌上。它们很安全。所以,在STL容器中的对象也很安全。我知道这个比喻听起来很老土,可是它很正确。 
       STL算法是标准算法,咱们能够把它们应用在那些容器中的对象上。这些算法都有很著名的执行特性。它们能够给对象排序,删除它们,给它们记数,比较,找出特殊的对象,把它们合并到另外一个容器中,以及执行其余有用的操做。 
       STL iterator就象是容器中指向对象的指针。STL的算法使用iterator在容器上进行操做。Iterator设置算法的边界 ,容器的长度,和其余一些事情。举个例子,有些iterator仅让算法读元素,有一些让算法写元素,有一些则二者都行。 Iterator也决定在容器中处理的方向。 
       你能够经过调用容器的成员函数begin()来获得一个指向一个容器起始位置的iterator。你能够调用一个容器的 end() 函数来获得过去的最后一个值(就是处理停在那的那个值)。 
       这就是STL全部的东西,容器、算法、和容许算法工做在容器中的元素上的iterator。 算法以合适、标准的方法操做对象,并可经过iterator获得容器精确的长度。一旦作了这些,它们就在也不会“跑出边界”。还有一些其余的对这些核心组件类型有功能性加强的组件,例如函数对象。
原文见:http://www.chinalinuxpub.com/doc/pro/stl.html
------------------------------------------------------------------------------------
ATL: Active Template Library (活动模板库)
安全


能够看一下潘爱民关于《ATL Internals》的书评: 
       ATL是一个产生C++/COM代码的框架,就如同C语言是一个产生汇编代码的框架
ATL又不一样于MFC,它彻底面向COM组件,其技术路线也不一样于MFC,MFC使用的是C++中的继承、封装、嵌套等常规技术,而ATL使用了C++中模板、多继承等高级技术,甚至还用到了STL。因此学习和使用ATL要求咱们必须熟悉这些C++高级特性。另外一方面,ATL结构彻底针对COM中的诸多规范,这就要求使用人员必须很是了解COM规范,才有可能真正把ATL用好 
       对于COM应用的开发,ATL无疑是首选的工具,与MFC相比,ATL的规模还不算大,可是从上述的介绍咱们能够看出,ATL涉及到了COM的方方面面。 实际上,ATL的内容还要多得多,好比OLE DB的支持、MTS的支持等,尽管如此,若是咱们有了这本书中的内容为基础,那么再去学习这些扩展的内容就会容易得多,结合ATL中实现COM的基本手段 加上这些应用技术的背景知识,咱们能够很容易地掌握这些开发技术。 
       可是若是咱们要想熟练掌握甚至精通ATL的话,那么这只是一个开头,前面还有漫长的路要走。缘由有多方面,一则COM自己异常复杂,不下苦功难窥全貌;二则ATL确实奥妙不少,它体现了C++语法的博大精深;三则ATL还存在不少错误,虽然本书做者指出了一些错误,但实际的错误确定更多,这就对ATL使用者提出了更高的要求,若是使用过程当中不能发现这些错误或者避开这些错误,那么用ATL反而会阻碍咱们的工做。 
       虽然ATL比较精深,可是这本书的讲解很是通俗易懂,语言比较简练,条理很是清楚。即便在读完这本书以后,它仍然能够做为参考书指导咱们的开发和学习工做。我想,这就是好书的价值所在吧。
----------------------------------------------------------------------------------
WTL:Windows Templat Library
见:
http://www.c-view.org/journal/006/wtl.htm服务器


       在ATL出现的时候,一些部分COM的编程人员开始以为开发COM运用是一种快乐,由于使用它很方便地开发小规模的COM组件,但好景不长,现实的COM组件是包罗至关普遍的,特别当它们准备使用窗口控件,发现ATL提供的至关的稀少。所以Microsoft推出了半成品与没有技术支持的WTL,这也是WTL诞生的缘由。 
       不少初次接触WTL都问“WTL这三个字母表明什么呢?”:WTL全称为Windows Template Library,构架于ATL之上,采用C++模板技术来包装大部窗口控制,并给出一个与MFC类似的应用框架。他们紧跟着问“那我如何获得它呢?”:因为WTL是Microsoft推出的,在Microsoft的PlatForm SDK中就有WTL是ATL的扩展,也是由ATL小组开发,包含在Microsoft于2000年1月发布的开发平台SDK包中(也能够从Microsoft网站上下 载),虽然Microsoft没有正式支持。WTL经过提供一个用于编写Win32应用程序和控制的轻量级的框架,一些特殊的视图,GDI对象和实用的 类,来扩展了ATL窗口类WTL设计特性--附带地,相对于MFC的优点--包括: 
       模板化,所以有较小的代码量。例如,一个简单的“hello world”SDI应用程序,基于WTL的程序只有24KB,而MFC静态链接结果是440KB,MFC动态链接的结果是24KB+1MB。 
       无太多相关性,而且能够自由地和SDK代码直接混合。 
       不会强迫使用特定的应用程序模型,尤为相对于MFC的应用程序框架。
WTL类包括: 
      
标准控制(编辑框,列表框,按钮等等) 
       公共控制(包括列表视图,树形视图,进度条,微调按钮) 
       IE控制(rebar,平面滚动条,日历等等) 
       命令条,菜单,和更新UI类 
       公共对话框 
       属性单和页类 
       框架窗口,MDI框架和子框架,分隔条,可滚动的窗口 
       设备环境(DC)和GDI对象类(笔、刷子、位图等) 
       打印机及其信息和设备模式类
实用工具类:包括CPoint, CRect, CSize, 和CString类 
       WTL AppWizard容许你生成SDI、MDI、多线程SDI和基于对话框的应用程序。多线程SDI应用程序就象IE或Windows Explorer(个人电脑),看起来象是启动了多个实例,实质上它们是同一进程的多个视图。这些视图能够是普通的基于CWindowImpl的窗口,或 基于窗体、列表框、编辑框、列表视图、树形视图、丰富文本编辑框或HTML控制。你可让你的应用程序拥有rebar、命令条(如同Windows CE)、工具条或状态条。你的应用程序能够包含ActiveX控制,甚至能够是一个COM服务器。 

       WTL = Windows Template Library,能够说起源于ATL 类库中关于Window 建立/管理的类。主要缘由是用原始的 WIN32 API 编写漂亮的用户界面工做量大,繁杂。MFC 虽然提供了一套很好的封装,可是也不是很容易消化和使用,特别是各个 MFC 类之间耦合很紧,要用好 MFC 就要理解不少 MFC 内在的运行机制(有人说 MFC 的封装是“白盒”封装,呵呵)。WTL 利用 C++ 模版的高级功能,提供很联系很松散的“独立”的类库,使用起来比较方便,并且代码体积小,没必要为了学习某个类必须学习一大堆相关的类。 

       可是 WTL 不是 Microsoft 官方正式支持的类库,虽然有至关多的人和愈来愈多的在使用;不过有可能未来会支持的。
网络

  

 


________________________________________________数据结构

COM,COM+,OLE,ActiveX,ATL,MFC,STL,WTL 多线程

 

1. COM: Component Object Model 组件对象模型框架

  包含如下两种组建类型
     OLE: Object Linking and Embedding 带有特殊接口的COM组件(对象的连接与嵌入),OLE 中与连接和嵌入无关的部分如今已成为Active 技术的一部分。详细信息,参考:Core_OLE_Background


     ActiveX: 带有特殊接口的COM组件

(COM对象实现IDispatch通常能够称之为ActiveX,此外ActiveX通常具备界面)
     包含以下两种组件实现方法
      ATL
      MFC
COM+: COM组建的运行环境,即COM库
 

Notes:

         ActiveX是Microsoft提出的一组使用COM(Component Object Model,组件对象模型)使   
  得软件部件在网络环境中进行交互的技术集
。它与具体的编程语言无关。做为针对Internet应 
  用开发的技术,ActiveX被普遍应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术

 也被用于方便地建立普通的桌面应用程序。  
   
  ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:  
    *   ActiveX控制(ActiveX   Control);用于向WEB页面、Microsoft   Word等支持ActiveX    
  的容器(Container)中插入COM对象。  
    *   ActiveX文档(ActiveX   Document);用于在WEB   Browser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如Microsoft   Word文档,Microsoft   Excel文档或者用户
定义的文档等。  
    *   ActiveX脚本描述(ActiveX   Scripting);用于从客户端或者服务器端操纵ActiveX控    
  制和Java程序,传递数据,协调它们之间的操做。  
    *   ActiveX服务器框架(ActiveX   Server   Framework);提供了一系列针对WEB服务器应   用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。  
    *   在Internet   Explorer中内置Java虚拟机(Java   Virtual   Machine),从而使Java   Applet   可以在Internet   Explorer上运行,并能够与ActiveX控制经过脚本描述语言进行通讯。

 

2. ATL: Active Template Library 是开发COM和ActiveX组件的C++模板库

    使用ATL可以快速地开发出高效、简洁的代码(Effective and Slim code),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。
    入口函数为 DllMain (进程内组件)
    入口函数为 tWinMain (进程外组件)
    入口函数为 CWinApp (ATL支持MFC)

     在ATL产生之前,开发COM组件的方法主要有两种:一是使用COM   SDK直接开发COM组件,另外一种方式是经过MFC提供的COM支持来实现。    
     首先ATL的基本目标就是使COM应用开发尽量地自动化,这个基本目标就决定了ATL只面向COM开发提供支持。   
      其次,ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效,即所谓的“Slim   Code”。     
      第三,ATL的各个版本对Microsoft的基于COM的各类新的组件技术如MTS、ASP等都有很好的支持,ATL对新技术的反应速度大大快于MFC。ATL已经成为Microsoft支持COM应用开发的主要开发工具,所以COM技术方面的新进展在很短的时间内都会在ATL中获得反映。这使开发者使用ATL进行COM编程能够获得直接使用COM SDK编程一样的灵活性和强大的功能。  

3.  MFC:MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,而且包含一个应用程序框架,以减小应用程序开发人员的工做量。其中包含的类包含大量Windows句柄封装类和不少Windows的内建控件和组件的封装类。

 

4.   STL: Standard Template Library 标准C++程序开发的模板库

是惠普实验室开发的一系列软件的统称,做为ANSI/ISO C++的一部分,已经被C++标准委员会正式采纳。STL的一个重要特色是数据结构和算法的分离,这使其很是通用。另外一个重要特性为不是面向对象的,为了实现通用性。  
   
  STL有6大组件:algorithm(算法)、container(容器)、iterator(迭代器)、function   object(函数对象)、adaptors(适配器)和allocator(记忆体配置器),其中最主要的是前三个组件。 

___________________________________________

下面是一篇挺有意思的文章 讲MFC与ATL的关系 就如男人和女儿的关系

MFC与ATL的男女关系提及

男女关系

若是从哲学的观点来看,这大概要说是一种辩证关系了!

首先谈谈男人。男人与男孩的区别在于责任,对于一个男人来讲,他的肩膀永远有负担,他要解决生活中遇到的全部问题,能够为妻儿带来幸福生活,能够赡养父母,能够作一些成就来创一番事业。因此男人不要轻生,由于你垮下就意味着你的负担没有了支撑,也就是你不负责任。男人的这种责任体现了一种刚性,打不倒压不垮,坎坎坷坷一路走来即便没有扬名立万可是肩膀上的负担始终没有落下。铮铮铁骨、铁血男儿、阳刚之美都是对男人的赞美,一个家庭男人是顶梁柱,这就是责任。

再谈谈女人。女人与女孩的区别在于柔情,少了撒娇和任性,多了体贴和温柔。女人是生活的调剂品,少了她尽管能够填抱肚皮、补充养分但食之无味。女人天生就是善于交际的,这自己体现的就是一种柔性,就像太极同样,以柔克刚,借助刚性体现柔美。

用建筑来形容男女关系,男人就像钢筋水泥搭建起来的框架承受着外力,女人则是对框架填补装修使其美观,不一样的男人有着不一样的建筑风格,不一样的女人可使建筑呈现不一样的美。成功的男人背后都有一个女人,钢筋水泥加上精心装饰让人体会到设计之美,至于谁重要次要,谁表谁里都不是关键,关键的是刚柔的结合。

MFC

MFC是一个男人,从Microsoft C/C++ version 7.0到Visual Stduio.net 2005一直承担着软件框架设计的角色,风风雨雨路不回头,屹立在软件设计大道,为开发者提供便利,著名的BCG库和XTREME库都是在MFC源码基础上的改进。它大而繁杂,曲折通幽,粗旷豪放。它必须承担责任,提供软件设计的一套解决方案,并且背负着历史包袱,因此不免带有一些成熟男人的深邃而不被人理解。若是你还一味的去批判它,那只能说你不懂男人的心,不理解一个男人难言之苦。 ATL

ATL是一个女人,小巧灵活讨人喜好,它做为COM思想的实现而拿出来解决软件协做的问题。它能够不具体实现功能而只留出一些接口,接口两端相通而且随时拔插,多么完美一个女人!为一个C++对象配备一个ATL对象你能够想象有什么结果嘛?

软件设计中的MFC与ATL

之前我一直觉得ATL就是作控件、构造插件接口体系的,而MFC就是用来作界面功能。它们属于不一样体系,在功能级别上存在差别,因此只是在纵向上结合而没有尝试横向的结合。人类社会是天然的,软件社会也应该是天然的。天然表明一种随和,亲近,协调。

提到MFC,八九不离十就涉及到软件界面开发。目前来讲软件复用需求愈来愈高,而软件功能的不肯定因素愈来愈大,一个特定的界面行为可能不肯定。MFC是一个男人,用它能够作任何想作的界面,这就是它的刚性。可是咱们究竟是要去作什么仍是告诉别人咱们能够作什么呢?若是咱们一味的作,那咱们充其量只是一个莽夫,是吕布有勇无谋。我告诉你我有一个MFC对象,还告诉你它能够作什么,这样不就够了。

MFC是男人天生缺少沟通能力,因此没法告知外界它自身的行为,只有它本身知道。这时候就须要一个管子插到对象内部去了解它,而ATL恰好提供了一个接口,将其一段插入MFC对象内部而露出另外一端以便告知外界MFC对象内部的行为。这样的界面是可解释的界面,它具备作事情的能力,可是它不去作,而成为可复用界面。

相关文章
相关标签/搜索