您知道C++/CX吗?

最近装了VS11Beta,才关注有关WinRT的信息。C++这次又被微软“扩展”了,新名字叫C++/CX。

C++/CLI是微软为了让C++代码能够在.Net上运行所做的尝试(谁还记得Managed C++),C++/CX是为了让C++程序员能在WinRT上“轻松”地一展身手所做的扩展。

现在C++/CX的资料非常少,Google上搜索一下,头条就是Inside the C++/CX Design,是微软Visual C++团队的一个哥们写的。看他的照片,一脸苦逼样,就知道他被C++折磨得非常不爽。

他的文章中也是充满了痛苦。为了迎合微软的COM技术(为什么微软老是抱着COM不放)和WinRT的模型,他们尝试了各种方法,例如写一个完全符合C++标准的纯类库(WRL),但是发现这个类库使用还是非常不方便,因为写一个COM组件是非常麻烦的事情,必须有很多工具配合。如果没有Visual Studio,我估计不会有多少人愿意写COM组件。于是他们再一次扩展了C++(有点类似ATL Attributes),编译器会自动生成很多代码来把一个类搞成COM兼容,例如自动生成uuid,各种借口定义等。当然一切都是native的代码,并不涉及类似.Net的托管问题。

当然,文章很短,评论才是经典。国外的程序员们也表达了他们的愤慨,以及对于微软Visual C++团队改语言癖好的不满。很多人认为即使是编译器自动生成代码,使用标准C++语法已经足够了,根本不用再去搞扩展。

只有C++程序员才能体会,对于扩展C++的强烈反感。C++的一个特点就是,自己跟自己不兼容,一旦有新特性,就要花费很多精力去把这个新特性和已有特性结合,而且很多情况下,这种结合会产生很多问题和陷阱。

我现在还没有搞清楚,他们说WinRT算是一个和.Net并行的新一代开发平台,底层由C++实现,上层可以由多种语言使用;您看,现在C++自己的平台,居然还要把自己折磨成这样才能使用,您说C++纠结不纠结?

话说C++11出来,新特性很多,让本来就复杂的C++更进一步——以后谁要是学C++,那得从C开始,到面向对象,到模版,到STL,到其他标准库(输入输出、正则表达式、线程等等),哪一个都不是能轻松搞定的。没准还要注意C++各种陷阱和最佳实践,于是要看(More)Effective C++(STL)等书。没准还要知道C++的工作原理才能装成高手,于是就要看C++对象模型。还有高手钻研C++标准吗?

以前写个C++类,稍微有点复杂度,就要提供构造、析构、拷贝、赋值函数(copy assignment),现在还要加上另一个赋值函数(move assignment),才能让这个类有比较正常的行为。考虑继承,则需要考虑多重继承的影响,是否virtual继承,使用public、protected还是private继承。写个方法就要考虑是否virtual,是否pure,最后pure virtual的析构函数居然还得提供实现。在实现实际的功能之前,为了符合C++的语义环境,很多时间都得花在这些琐碎之事上。

C++这个本来就很复杂的东西,却被微软一而再,再而三地扩展,来适应微软同样很复杂的COM技术。想到这里,谁都有一种去学C#的冲动。随便看一本C#编程教材,使用VisualStudio,我们就可以开发WinForm,ASP.Net,WPF,Silverlight,可以编写组件,可以找工作。

C++/CX,是C++在新一代Windows环境中的爆发,还是在新一代Windows环境中的灭亡?这个是问题。

posted @ 2012-03-05 09:14  Leading  阅读(14368)  评论(34编辑  收藏  举报