STL/ATL/WTL的區別

來源:互聯網
上載者:User
STL 即 Standard Template Library  STL(標準模板庫)是惠普實驗室開發的一系列軟體的統稱。它是由Alexander Stepanov、 Meng Lee和David R Musser在惠普實驗室工作時所開發出來的。現在雖說它主要出現在C+ +中,但在被引入C++之前該技術就已經存在了很長的一段時間。  STL的代碼從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator(迭 代器),幾乎所有的代碼都採用了模板類和模版函數的方式,這相比於傳統的由函數和類 組成的庫來說提供了更好的代碼重用機會。在C++標準中,STL被組織為下面的13個標頭檔:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<me mory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下筆者就簡單介紹一下ST L各個部分的主要特點。    從根本上說,STL是一些“容器”的集合,這些“容器”有list,vector,set,map等,STL也 是演算法和其他一些組件的集合。這裡的“容器”和演算法的集合指的是世界上很多聰明人很 多年的傑作。      STL的目的是標準化組件,這樣你就不用重新開發它們了。你可以僅僅使用這些現成的 組件。STL現在是C++的一部分,因此不用額外安裝什麽。它被內建在你的編譯器之內。因為STL的list是一個簡單的容器,所以我打算從它開始介紹STL如何使用。如果你懂得了這個概念,其他的就都沒有問題了。另外,list容器是相當簡單的,我們會看到這一點。       STL容器可以儲存對象,內建對象和類對象。它們會安全的儲存對象,並定義我們能夠操作的這個對象的介面。放在蛋架上的雞蛋不會滾到桌上。它們很安全。因此,在STL容器中的對象也很安全。我知道這個比喻聽起來很老土,但是它很正確。      STL演算法是標準演算法,我們可以把它們應用在那些容器中的對象上。這些演算法都有很著名的執行特性。它們可以給對象排序,刪除它們,給它們記數,比較,找出特殊的對象, 把它們合并到另一個容器中,以及執行其他有用的操作。      STL iterator就象是容器中指向對象的指標。STL的演算法使用iterator在容器上進行操作。Iterator設定演算法的邊界 ,容器的長度,和其他一些事情。舉個例子,有些iterator僅讓演算法讀元素,有一些讓演算法寫元素,有一些則兩者都行。 Iterator也決定在容器中處理的方向。       你可以通過調用容器的成員函數begin()來得到一個指向一個容器起始位置的iterator。你可以調用一個容器的 end() 函數來得到過去的最後一個值(就是處理停在那的那個值)。      這就是STL所有的東西,容器、演算法、和允許演算法工作在容器中的元素上的iterator。 演算法以合適、標準的方法操作對象,並可通過iterator得到容器精確的長度。一旦做了這些,它們就在也不會“跑出邊界”。 還有一些其他的對這些核心組件類型有功能性增強組件,例如函數對象。    ATL:  可以看一下潘愛民關於《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簡介   在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伺服器。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.