UWP之C++/CX开发
2016-08-06 11:08
169 查看
公司老板比较看重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#做开发吧。
最近装了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#做开发吧。
相关文章推荐
- 【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
- 【windows8开发】深入浅出C++/CX
- 【windows8开发】深入浅出C++/CX
- 【windows8开发】深入浅出C++/CX (转)
- Windows Store apps开发[43]C++/CX Part 4 of [n]: Static Member Functions
- Windows Store apps开发[42]C++/CX Part 3 of [n]: Under Construction
- 【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
- Windows Store apps开发[32]C++/CX Part 2 of [n]: hat(^)类型
- UWP C++_CX开荒记 第二回 设计框架
- C++开发uwp的坑
- 【windows8开发】深入浅出C++/CX
- Windows Store apps开发[19]C++/CX Part 0 of [n]: C++/CX简介
- Windows Store apps开发[26]C++/CX Part 1 of [n]: 一个简单的类
- 【windows8开发】深入浅出C++/CX
- Visual C++ MFC/ATL开发-提高篇
- AIX开发环境 Visual Age C++6.0
- 开发环境(mingw,gtk2.0,sdl,dev-c++)
- Visual C++ MFC/ATL开发-初级篇
- C++ SDK+Symbian开发入门之应用程序
- 使用C++和Directx开发GUI(三)