CString来生今世
来源:互联网 发布:你懂看片软件下载 编辑:程序博客网 时间:2024/04/28 18:24
话说,某一天ATL开发小组发现老是操作char,太低效,STL的string也不是很好用,于是乎,他们做了一个为ATL服务的简单的字符串类,名字叫 CSimpleStringT,通过typedef,定义成了 CSimpleString。
后天某一天,MFC的人也发现char和string超不好用,他们发现公司的ATL小组已经做了一个成熟CSimpleString类,于是MFC小组拿来直接使用。在使用中,MFC小组的人发现CSimpleString做的太简单了,有很多的功能,它都不提供,另外,类函数设计的也不好用。于是MFC小组的成员决定扩展CSimpleString,他们将扩展的代码写进cstringt.h中,另外抽离出对外的接口头文件afxstr.h,将定义放在了这。(到这里,我们发现了上面提到问题的发生点,MFC的头文件继承了ATL头文件)。
又到后来,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中。(注意,连名字取得都和afxstr.h相对应,到这里,我们又看到,ATL头文件继承了MFC头文件)。
就这样,诞生了两份CSring。日子很平淡的一天一天过去,直到有一天,有个项目要混用ATL和MFC,他们发现,有两份CString,编译不过!因为ATL的CString毕竟只是模仿MFC,于是ATL让路,加上了宏定义 #ifndef _AFX ,意即,在没有使用MFC时,ATL才定义CString。
ATL 和 MFC CString的故事讲完了,相信大家对CString相关文件目前结构的来龙去脉应该很清楚了。但是WTL呢?为什么WTL也要定义一个CString?话说WTL编写过程中,WTL组的后生小辈们看了ATL的CString代码,他们觉得咋这CString搞得咋这么复杂呢?看得头都大了,于是他们设计了一个四两拨千斤的CString,不继承任何东西,不依赖任何东西,就是一个简简单单的类。在初期,他们工作得很好,但是到后期,他们发现,如果两个人的代码用的是不同的CString的话,那么将代码合并的时候,编译不过,和之前遇到的问题一样,会产生两个CString,于是WTL不得不加了另外一个宏 _WTL_NO_CSTRING 来禁止WTL CString的编译。
好了,故事全都讲完了,ATL、WTL、MFC,结论是,先有CAtlSimpleString,后有MFC CString,再有ATL CString,最后有WTL CString,唉,微软的人搞这么复杂干嘛呢……
- CString来生今世
- 今世无缘
- 【今世彼此】
- 新来生
- 来生缘
- 爱有来生,来生有爱
- SCS的前身今世
- lena 之前生今世
- php的前生今世
- “前身与今世”
- lasso的今世前身
- JavaScript的前生今世
- SpringBoot 的今世前生
- 流媒体前生今世
- PCA的前生今世
- docker前身今世
- 但愿有来生
- 来生还你一辈子
- Android之四大组件解析
- 算法导论思考题2-4
- js小数点位数、 文本框内容变动事件、字符转成实数
- 正则表达式---手机,邮箱,固定电话格式的验证
- C# .Text.Trim('d');//去掉最后一个字符串
- CString来生今世
- ORA-12526: TNS:listener: all appropriate instances are in restricted mode
- 通过自定义图形shape的方法设置button的特效
- [转载]FeedBurner:基于MySQL和JAVA的可扩展Web应用
- **对输出格式中的空格处理**
- 遍历HashMap及获取所有的Key值
- ubutn Eclipse和PyDev搭建完美Python开发环境
- 获取GridView每列的id、姓名(实现删除功能)
- 文件上传