|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过java比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。<p>话说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的浅易版。由于ATLCString依附于MFC头文件,以是,假如在利用CSTRING而又不想到场过量别的文件时,WTLCSTRING供应了一个很好的选择。
一切文件都剖析后,我们发明,atl、mfc、wtl分离界说了一个CString。个中atl和mfc中的CString都是基于CStringT,只要一个中央是分歧的,即CStringT所援用的StringTrait(即StrTraitsATL仍是StrTraitMFC)。而WTLCString的完成是自力的,是一个真实的类。别的,StringTrait援用的Iterator是可选的(即底层字符串操纵封装)。
最初,我们发明ATL和MFC中触及CString的类干系有些庞大。
为何ATL和MFC的CString头文件要搅在一同?
上文的剖析有些混乱,我们经由过程一张图来加倍明晰的察看,以下:
上图中,用圈圈住的头文件暗示ATL头文件,没被圈的代表MFC头文件。别的,在头文件中间字符,暗示各个头文件中完成的类。
如今让我们细心寓目,全部貌似均衡的计划中,实在有着良多的不屈衡。我想问:
1、为何MFC头文件cstringt.h要包括atl头文件atlsimpstr.h?为何ATL头文件要包括cstringt.h?ATL弄ATL的,MFC弄MFC的,各不干系,起不更好?
2、ChTraitOS放在atlstr.h中,而ChTraitCRT放在cstringt.h中,他俩功效是相似的,逻辑上是绝对的,为神马在文件条理上却不合错误齐,要云云的别扭?
话说中国人对待成绩的时分,常常把某一年夜类看做一挥而就的完善的全体。比如Tencent很赢利,很年夜,产物推出快,人们就以为Tencent外部有着优秀的构造架构。这里我要告知人人的是,任何年夜范围的器材,都是一点一滴堆集起来的。ATL也是,MFC也是。这两个器材不是一个月、两个月的开辟就成了如今的模样的,他们都是慢慢叠加,慢慢改善才成了明天这个壮大的库的。扯了这些,是要告知人人,要以变更、堆集、静态来对待和剖析事物的衍生。
好了,如今我们来看为何微软会弄出这么别扭的布局。
话说,某一天ATL开辟小组发明总是操纵char,太低效,STL的string也不是很好用,因而乎,他们做了一个为ATL服务的复杂的字符串类,名字叫CSimpleStringT,经由过程typedef,界说成了CSimpleString。
后天某一天,MFC的人也发明char和string超欠好用,他们发明公司的ATL小组已做了一个成熟CSimpleString类,因而MFC小组拿来间接利用。在利用中,MFC小组的人发明CSimpleString做的太复杂了,有良多的功效,它都不供应,别的,类函数计划的也欠好用。因而MFC小组的成员决意扩大CSimpleString,他们将扩大的代码写进cstringt.h中,别的抽离出对外的接行动文件afxstr.h,将界说放在了这。(到这里,我们发明了下面提到成绩的产生点,MFC的头文件承继了ATL头文件)。
<p>又到厥后,MFC小组的某个成员(主程级)转到了ATL小组,离开ATL小组后,他发明,常日用惯了CString,如今要用CSimpleString真TM憋屈,因而他倡议在ATL中自封装一个CStrnig。ATL小组发明,继然MFC的CString已做得这么成熟不乱且好用了,本人没需要再重整旗鼓,别的,他们发明cstringt.h是自力于MFC别的文件的,固然属于MFC小组(MFC小组所写),可是援用的却都是atl的头文件,因而,援用cstringt.h不会融进MFC别的旁年夜的文件,因而可行。以是综合以上思索,ATL小组间接承继于cstringt头文件,派生了本人的CString,放在了atlstr.h中它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。 |
|