日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
剖析ATL、WTL CString的實現(xiàn)

話說CString這個東西困擾了很多年輕人,因為它會引起詭異的編譯錯誤,今天跟著我一起來深入ATL、WTL頭文件,來把這個東西搞個清清楚楚。

站在用戶的角度思考問題,與客戶深入溝通,找到漢源網(wǎng)站設計與漢源網(wǎng)站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋漢源地區(qū)。

涉及到頭文件

ATL : atlstr.h, atlsimpstr.h

MFC : cstringt.h、afxstr.h

WTL : atlmisc.h

ATL和MFC有關剪不斷理還亂的關系,為了更容易分析,我們先要理清這四個頭文件間的關系。觀察相互間觀察順序,可以得出:atlstr.h引用cstringt.h,cstring引用atlsimpstr.h,afxstr.h引用cstringt.h,由此可得出下圖:

atlsimpstr.h 都干了什么

1、定義了 CStringData 和 CNilStringData 類

2、定義了 ChTraitsBase 類,類如下:

此類比較簡單,功能是為不同的字符類型,建立新的統(tǒng)一的名稱。另外,這里使用到了模板特化技術。

3、定義了CSimpleStringT類,此類的功能是,在ChTraitBase定義的統(tǒng)一名稱的基礎上,提供字符串一些基本的操作功能函數(shù)。

t_bMFCDLL可無視。另外,注意,此處所操作的字符串對象,都是CStringData。

總述:在atlsimpstr.h中,我們發(fā)現(xiàn)了3個令人感興趣的東西,CStringData 是字符串操作單元,ChTraitBase提供字符串變量統(tǒng)一命名服務,而CSimpStringT是一個基于CStringData字符串操作單元的簡易的CString(注意,只是簡易,其中并未提供我們常用的CString中的那些函數(shù))。

cstringt.h 都干了什么

1、定義了 ChTraitsCRT 類,如下:

該類繼承atlsimpstr.h中的 ChTraitsBase 類,然后在父類提供服務的基礎上,提供一系列字符串底層操作函數(shù)。思考:為什么此處用繼承?而CSimpleStringT使用提t(yī)ypedef?

2、定義了 _MFCDLLTraitsCheck 類,如下:

這里再一次用到了模板特化技術,該類用于檢測當前使用的StringTraits是ATL定義的還是MFC定義的。(ATL定義的叫StrTraitATL,MFC定義的叫StrTraitMFC,后面會提到)

3、定義了 CStringT 類,如下:

注意了,CStringT 就是CString的真身!前面說到,CSimpStringT操作CStringData字符串操作單元,提供基本的字符串操作功能,而CStringT繼承CSimpleStringT,利用StringTraits,包裝更高級的功能函數(shù)。而這些更高級的功能函數(shù),就是我們通常調用CString時所使用到的那些函數(shù)。

atlstr.h 都干了什么

1、定義了 CAtlStringMgr 類。

2、定義了 ChTraitsOS 類,如下:

和 ChTraitCRT相對應,ChTraitsOS繼承atlsimpstr.h中的 ChTraitsBase 類,然后在父類提供服務的基礎上,提供一系列字符串底層操作函數(shù)。

和 ChTraitCRT相比,他倆提供的函數(shù)大部相關,少數(shù)不同,另外相同函數(shù)名的實現(xiàn)不一定相同。

3、定義了 StrTraitATL 類,如下:

和 StrTraitMFC相對應,該類提供字符串資源管理函數(shù)和CStringData內存管理器的ATL版。

4、定義了CSTRING,如下:

afxstr.h 都干了什么

1、定義了 StrTraitMFC,如下:

上文已述,和StrTraitATL相對,本類提供的功能實現(xiàn)都封閉在MFC中。

2、定義了CString,如下:

atlmisc.h 都干了什么

打開atlmisc.h,可以發(fā)現(xiàn)此文件只不過是定義了一些結構體,定義了一個CString的簡易版。因為ATL CString依賴于MFC頭文件,所以,如果在使用CSTRING而又不想加入過多其它文件時,WTL CSTRING提供了一個很好的選擇。

所有文件都分析后,我們發(fā)現(xiàn),atl、mfc、wtl分別定義了一個CString。其中atl和mfc中的CString都是基于CStringT,只有一個地方是不同的,即CStringT所引用的StringTrait(即StrTraitsATL 還是 StrTraitMFC)。而WTL CString 的實現(xiàn)是獨立的,是一個真正的類。另外 ,StringTrait引用的Iterator是可選的(即底層字符串操作封裝)。

最后,我們發(fā)現(xiàn)ATL和MFC中涉及CString的類關系有些復雜,我希望畫一個圖來更好的描述各個類間的相互關系,這個圖將放在下一篇隨筆……

 【編輯推薦】

  1. C++ Cstring應用方法概述
  2. 4.5.6 ATL::CStringT與std::basic_string
  3. Java編譯過程與c/c++編譯過程有何不同
  4. Eric Raymond cstrings tempnam()以不安全方式創(chuàng)建臨時文件漏洞

名稱欄目:剖析ATL、WTL CString的實現(xiàn)
網(wǎng)頁URL:http://m.5511xx.com/article/codgcei.html