成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

剖析ATL、WTL CString的實(shí)現(xiàn)

開發(fā) 后端
本文主要介紹的是ATL、WTL和CString,WTL提供的CString類在ATL中也提供了相同的類,并且使用WTL::CString類后,經(jīng)常會出現(xiàn)標(biāo)題所示的編譯錯(cuò)誤,讓我們一起來看。

話說CString這個(gè)東西困擾了很多年輕人,因?yàn)樗鼤鹪幃惖木幾g錯(cuò)誤,今天跟著我一起來深入ATLWTL頭文件,來把這個(gè)東西搞個(gè)清清楚楚。

涉及到頭文件

ATL : atlstr.h, atlsimpstr.h

MFC : cstringt.h、afxstr.h

WTL : atlmisc.h

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

atlsimpstr.h 都干了什么

1、定義了 CStringData 和 CNilStringData 類

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

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

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

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

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

cstringt.h 都干了什么

1、定義了 ChTraitsCRT 類,如下:

 

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

2、定義了 _MFCDLLTraitsCheck 類,如下:

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

3、定義了 CStringT 類,如下:

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

atlstr.h 都干了什么

1、定義了 CAtlStringMgr 類。

2、定義了 ChTraitsOS 類,如下:

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

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

3、定義了 StrTraitATL 類,如下:

 

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

4、定義了CSTRING,如下:

 

afxstr.h 都干了什么

1、定義了 StrTraitMFC,如下:

 

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

2、定義了CString,如下:

 

atlmisc.h 都干了什么

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

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

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

 【編輯推薦】

  1. C++ Cstring應(yīng)用方法概述
  2. 4.5.6 ATL::CStringT與std::basic_string
  3. Java編譯過程與c/c++編譯過程有何不同
  4. Eric Raymond cstrings tempnam()以不安全方式創(chuàng)建臨時(shí)文件漏洞
責(zé)任編輯:于鐵 來源: 博客園
相關(guān)推薦

2011-04-21 10:01:37

WTL CString

2010-02-04 16:58:29

C++類庫

2015-07-28 10:06:03

C#內(nèi)部實(shí)現(xiàn)剖析

2024-01-19 12:48:00

Redis存儲數(shù)據(jù)庫

2010-02-02 14:36:08

C++ Cstring

2009-09-02 13:36:58

C#實(shí)現(xiàn)多個(gè)接口

2021-04-15 09:07:52

hotspotJavaC++

2022-07-14 08:02:57

Netty網(wǎng)絡(luò)模塊

2013-10-10 14:52:53

jQueryDeferred

2010-02-24 15:42:03

WCF服務(wù)端安全

2011-06-24 16:09:24

Qt 動畫 狀態(tài)機(jī)

2025-04-03 08:35:00

分頁查詢開發(fā)代碼

2016-12-08 11:01:39

紅黑樹Java

2009-09-03 15:03:27

C#實(shí)現(xiàn)AOP微型框架

2009-09-10 17:37:01

C# get post

2009-08-28 15:38:49

C#實(shí)現(xiàn)斷點(diǎn)續(xù)傳

2025-04-02 00:33:00

2025-04-01 02:00:22

2009-11-16 14:15:51

PHP上傳多個(gè)文件

2010-01-22 14:59:40

VB.NET表單自動提
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩成人在线观看 | 欧美精品在线免费观看 | 综合色影院 | 91一区二区三区在线观看 | 国产成人精品一区二区三区四区 | 欧美一区二区三区在线观看 | 欧美视频一区二区三区 | 国产亚洲精品区 | 日韩精品一区在线 | 中文字幕一区二区三区不卡 | 国产在线中文 | 在线国产视频观看 | 91高清在线观看 | 精品91久久 | 久久亚洲综合 | 久久免费精品 | 欧美成人激情 | 精品自拍视频在线观看 | 99re99| 久久网亚洲 | 黄免费观看视频 | 一区影院 | 中文字幕一区在线观看视频 | 性一交一乱一透一a级 | 午夜无码国产理论在线 | 国产无人区一区二区三区 | 日本大香伊一区二区三区 | 91九色视频 | 亚洲高清在线观看 | 成人免费观看男女羞羞视频 | 国产精品成人一区二区三区 | 日韩精品a在线观看图片 | 久久久久久久久久影视 | 日日操操 | 韩日精品一区 | 青青久在线视频 | 国产一级免费视频 | 91久久精品视频 | 婷婷不卡 | 国产精品一卡二卡三卡 | 91影院|