话说CString这个东西困扰了很多年轻人,因为它会引起诡异的编译错误,今天跟着我一起来深入ATL、WTL头文件,来把这个东西搞个清清楚楚。
站在用户的角度思考问题,与客户深入沟通,找到汉源网站设计与汉源网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、国际域名空间、虚拟主机、企业邮箱。业务覆盖汉源地区。
涉及到头文件
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 类,类如下:
此类比较简单,功能是为不同的字符类型,建立新的统一的名称。另外,这里使用到了模板特化技术。
3、定义了CSimpleStringT类,此类的功能是,在ChTraitBase定义的统一名称的基础上,提供字符串一些基本的操作功能函数。
t_bMFCDLL可无视。另外,注意,此处所操作的字符串对象,都是CStringData。
总述:在atlsimpstr.h中,我们发现了3个令人感兴趣的东西,CStringData 是字符串操作单元,ChTraitBase提供字符串变量统一命名服务,而CSimpStringT是一个基于CStringData字符串操作单元的简易的CString(注意,只是简易,其中并未提供我们常用的CString中的那些函数)。
cstringt.h 都干了什么
1、定义了 ChTraitsCRT 类,如下:
该类继承atlsimpstr.h中的 ChTraitsBase 类,然后在父类提供服务的基础上,提供一系列字符串底层操作函数。思考:为什么此处用继承?而CSimpleStringT使用提typedef?
2、定义了 _MFCDLLTraitsCheck 类,如下:
这里再一次用到了模板特化技术,该类用于检测当前使用的StringTraits是ATL定义的还是MFC定义的。(ATL定义的叫StrTraitATL,MFC定义的叫StrTraitMFC,后面会提到)
3、定义了 CStringT 类,如下:
注意了,CStringT 就是CString的真身!前面说到,CSimpStringT操作CStringData字符串操作单元,提供基本的字符串操作功能,而CStringT继承CSimpleStringT,利用StringTraits,包装更高级的功能函数。而这些更高级的功能函数,就是我们通常调用CString时所使用到的那些函数。
atlstr.h 都干了什么
1、定义了 CAtlStringMgr 类。
2、定义了 ChTraitsOS 类,如下:
和 ChTraitCRT相对应,ChTraitsOS继承atlsimpstr.h中的 ChTraitsBase 类,然后在父类提供服务的基础上,提供一系列字符串底层操作函数。
和 ChTraitCRT相比,他俩提供的函数大部相关,少数不同,另外相同函数名的实现不一定相同。
3、定义了 StrTraitATL 类,如下:
和 StrTraitMFC相对应,该类提供字符串资源管理函数和CStringData内存管理器的ATL版。
4、定义了CSTRING,如下:
afxstr.h 都干了什么
1、定义了 StrTraitMFC,如下:
上文已述,和StrTraitATL相对,本类提供的功能实现都封闭在MFC中。
2、定义了CString,如下:
atlmisc.h 都干了什么
打开atlmisc.h,可以发现此文件只不过是定义了一些结构体,定义了一个CString的简易版。因为ATL CString依赖于MFC头文件,所以,如果在使用CSTRING而又不想加入过多其它文件时,WTL CSTRING提供了一个很好的选择。
所有文件都分析后,我们发现,atl、mfc、wtl分别定义了一个CString。其中atl和mfc中的CString都是基于CStringT,只有一个地方是不同的,即CStringT所引用的StringTrait(即StrTraitsATL 还是 StrTraitMFC)。而WTL CString 的实现是独立的,是一个真正的类。另外 ,StringTrait引用的Iterator是可选的(即底层字符串操作封装)。
最后,我们发现ATL和MFC中涉及CString的类关系有些复杂,我希望画一个图来更好的描述各个类间的相互关系,这个图将放在下一篇随笔……
【编辑推荐】
网页题目:剖析ATL、WTL CString的实现
URL标题:http://www.shufengxianlan.com/qtweb/news30/284530.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联