UWP之C++/CX开发

公司老板比较看重UWP的市场前景,需要我们现在去做技术积累。由于笔者以前都是做c++开发的,所以想使用c++做UWP开发,初始时只是发现UWP中C++开发资料很少,由于也不太懂UWP,所以前期使用C#做开发(资料比较多)。熟悉一段时间后(自认为对UWP有了一定的了解了),想看看使用C++开发如何。生成一个C++项目后,发现我用new生成一个对象都会出现,提示不支持new操作,要使用new^。觉得很不可思议呀,怎么会改动如何之大呢。在网上找了资料看看,发现原来这又是微软给提供的坑。大家可以看一下原文。

最近装了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环境中的灭亡?这个是问题。

看了后得出的结论是,果断放弃CX,还是老老实实用C#做开发吧。

你可能感兴趣的:(UWP-CX)