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#做开发吧。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
UWP(通用 Windows 平台)应用程序中使用 C++ 编写代码,可以按照以下步骤进行操作: 1. 打开 Visual Studio,并创建一个新的 UWP 项目。 2. 在项目创建向导中,选择使用 C++/WinRT 作为项目的编程语言。 3. 在解决方案资源管理器中,找到 `MainPage.xaml` 文件。这是应用程序的主页面。 4. 打开 `MainPage.xaml` 文件,并将其分为两个区域:一个用于 XAML 布局,另一个用于 C++ 代码。 5. 在 XAML 区域中,定义应用程序的用户界面布局,使用 XAML 标记语言进行描述。 6. 在 C++ 区域中,编写与用户界面交互的逻辑代码。 下面是一个简单的示例,展示了如何在 UWP 中使用 C++ 编写代码: ```cpp #include <winrt/Windows.UI.Xaml.Controls.h> #include <winrt/Windows.UI.Xaml.Hosting.h> using namespace winrt; using namespace Windows::UI::Xaml::Controls; using namespace Windows::UI::Xaml::Hosting; int main() { // 初始化 UWP 应用程序 init_apartment(); // 创建一个 TextBlock 控件 TextBlock textBlock; textBlock.Text(L"Hello, UWP from C++!"); // 创建一个 XAML 布局容器 Grid grid; // 将 TextBlock 添加到布局容器中 grid.Children().Append(textBlock); // 在应用程序窗口中显示布局容器 XamlApplication::Current().LoadComponent(grid); // 运行应用程序 XamlApplication::Current().Run(); return 0; } ``` 在上面的示例中,我们使用了 `winrt` 命名空间来引用 UWP 的相关类。我们创建了一个 `TextBlock` 控件,设置其文本内容,并将其添加到一个 `Grid` 布局容器中。最后,我们使用 `XamlApplication` 类来加载和运行应用程序。 请注意,这只是一个简单的示例,实际的 UWP 开发可能涉及到更复杂的逻辑和组件。你可以根据自己的需求,在 C++ 区域中编写相应的代码来实现你想要的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值