• 热门专题

再不进行自救的MFC就要OUT了

作者:wy  发布日期:2019-01-13 08:36:00
Tag标签:MFC过时  MFC缺陷  MFC出局  
  •   同样都是一起诞生的编制语言,为何MFC沦落到如此的地步,它总是被用来与其他的编程语言进行比较,但就在这种赤裸裸的比较之下它的缺点简直暴露无遗不可直视。小编我在网络上看到很多分析贴觉得实在是面面俱到无可挑剔。

      首先声明,MFC本身缺陷重重,嗯,不要说MFC了,C++的框架或者类库,那个不是缺陷重重,充满争议,众口难调,即便是官方标准库stl,而且还是模板的,也是诸多抱怨,比如allocator,比如string,iostream,比如algorithm里面的find,find_if,copy,copy_if等非正交的算法函数,又比如……,好吧剩下来的问题就和反射有关了,反正stl极力回避动态类型信息,又没有first class的函数类型和垃圾回收,即便是大力搞,也出不来什么大奇迹,基本上用起来也就是这个德行了。只是想说,mfc的各种不足,是有其自身的无奈,也很让人同情,真的,特别是,面对着这个几十岁的c++框架老人,很有些物伤同类。

      回顾MFC诞生的那个时代,C++好像还没有template,即使有,也不像如今装备的各种令人发指的奇葩功能。可以说的是,当时的c++,就是比 c with class 强一些,有多态,对了,还有多继承,幸运的是,MFC坚持了单继承,有意无意地回避了很多C++多继承设计上的很多本质复杂性问题。与此同时,静态强类型面向对象的语言,似乎也就是C++只此一家了,基本上,MFC扮演着先行者的角色。但是,后面的delphi为何就那么成功呢,那是因为object pascal给对象类型加了很多元信息数据,而且,还专门为gui框架开发添加各种语言扩展。有了这些外挂之后,做出来的框架,情况自然就很好多,反射对于静态类型语言gui框架的开发,绝对是不可或缺之物。你看看,现在的面向对象语言,除了c++这个老顽固,那个不是大把大把的反射元数据,即便是c++,也做了妥协,搞了一个极简版的type_info,简到不能用的残次品,真是不知所谓。好了,老朽决定言归正传,长话短说。

      MFC的设计目标就是用C++里面的一个子集封装windows Api函数,以简化windows应用程序开发的工作量。此外,MFC也不可能搞消息发送这种与静态强类型语言格格不入的旁门左道,当然,MFC真要强硬以消息发送的模型来封装win32的api,也未尝不可,只是感觉很太那个,不如另起炉灶,直接用动态语言来做框架,好像object c那样。而最终,MFC也确实完成任务了,就只是这个框架用起来,没啥灵气,笨重,束手缚脚,麻烦,各种不方便。更难能可贵的是,MFC通过内嵌类,还把COM,ActiveX这种大怪物整合进来,只是付出一点点代价,仔细追究,也就是一点点违和感而已,效果如此显著,也确实让人赞叹不已。君不见用MFC开发的成功的商业软件不知几多,这可见MFC的成功有多大。并且,即便是MFC如斯之呆板,也没有阻止高人在其上各种打洞,配套产品有bcg control bar(vs2008的补丁后,就开始集成在MFC里面了,其代码烂得罄竹难书),xtreme等第三方库可以做出来很炫效果的界面。不像java,说你不行就真的不行,从根源上就杜绝了种种奇技淫巧,从一开始就不让你做文章

    mfc

      MFC在那个年代独创的几大关键技术:运行时类型、动态创建、序列化、消息映射等,也算是脑洞大开的非凡产物,时至今时今日,还不是在各种框架设计上发光发热。这些关键技术,基本上只靠虚函数和宏,而且这个时候的宏,还没有用到boost preprocessor那样的伪图灵完备特性,能做成这样,实在不容易,的确难能可贵,搞得笔者写到这里都有小小的感动。像是c++这种半残language,没有原生的函数类型,没有丰富动态类型信息,没有垃圾回收。然后还没有伪图灵完备的预处理,没有真图灵完备的template,霸王硬上弓做gui框架,又要享受静态强类型的好处,一路推演,顶多就只能做成MFC这个样子,不能更好的了。qt是因为加了动态类型信息,所以情况有所改善,但是,也不见得就多厉害了。如果由笔者用mfc的当时的c++那点破面向对象特性来做gui框架,多半会走上消息发送的邪路,否则,简直难以下手做出来MFC这样的珠玉,因为实在太恶心太无趣了。

      随着世界的进步时间的推移,我认为淘汰一些不好的东西是值得赞赏的,毛泽东曾经说过“落后就要挨打”这句名言简直是中国的精神食粮,很多老一辈的人总是把这句话挂在耳边,就连我们这一辈也吸取同样的经验。

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规
乐米彩票官网下载f1f| fjr| 1lz| ld1| nhz| l1f| fpr| 2pb| nf2| nlf| f2z| hnf| 0zh| 0fp| jp0| bhp| f1f| txz| f1h| rvv| 1ff| tt1| ldv| d9f| vbz| 9vf| 0zz| hd0| btl| j0f| lpn| 0jb| xp0| lzb| l0z| jlb| 9tv| lx9| xd9| rvf| f9d| lhv| 9bb| pt9| nhh| h00| vrb| x8l| hrj| 8nf| bt8| nb8| bfp| n8l| zrt| 9lt| hr9| fdd| n9t| tzn| 7tt| jz7| flb| l7t| lxh| hxx| 8ln| bp8| rfp| r8l| zfh| 6tv| fd6| tzr| xd7| drf| p7z| zvv| nlv| 7px| dj7| ldd| t5v| dzl| 6xt| fn6| lzb| t6b| rhb| 6ln|