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

Contents 开发桌面应用 设置开发环境 系统要求 安装开发人员工具 启用设备进行开发 开发人员模式功能和调试 创建一个开发者帐户 入门 概述 适用于 Windows 应用的 Visual Studio 模板 生成适用于 Windows 11 的应用 让你的应用在 Windows 11 上出色表现 设计和 UI 概述 Windows 11 中的设计 Windows 11 设计原则 Windows 11 签名体验 Geometry 颜色 分层和提升 材料 图标 版式 设计基础知识 概述 应用设计简介 导航基础知识 概述 实现基本导航 导航历史记录和向后导航 命令基础知识 内容基础知识 教程 创建用户界面 创建自适应布局 设置控件的样式 布局 概述 页面布局 屏幕大小和断点 响应式设计技术 使用 XAML 的布局 显示多个视图 显示多个视图 使用 AppWindow 使用 ApplicationView 对齐、边距和填充 面板 概述 教程:使用布局面板 拆分视图 自定义面板 自定义面板示例:BoxPanel 附加的布局 转换 概述 3D 透视效果 Z 深度和阴影 控制 概述 控件和事件简介 命令处理简介 基本输入 按钮 复选框 组合框和列表框 超链接 单选按钮 评分控件 滑块 切换开关 集合 概述 列表视图和网格视图 翻转视图 PipsPager 树视图 ItemsRepeater 项目容器和模板 项目容器和模板 数据模板选择 列表视图项模板 网格视图项模板 选择和交互 集合命令处理 “选择模式”概述 轻扫 下拉刷新 筛选集合 其他集合选项和自定义 反转列表 嵌套 UI 对话框和浮出控件 概述 对话框 浮出控件 教学提示 窗体 媒体、图形和形状 动画图标 图像和图像画笔 墨迹 媒体播放 自定义传输控件 形状 Web 视图 菜单和工具栏 菜单和上下文菜单 命令栏 命令栏浮出控件 菜单浮出控件和菜单栏 导航 痕迹导航栏 列表/详细信息 导航视图 Pivot 选项卡视图 人员 联系人卡片 头像图片 选取器 颜色选取器 日期和时间控件 日历日期选取器 日历视图 日期选取器 时间选取器 滚动和布局 Expander 滚动和平移控件 语义式缩放 双窗格视图 状态和信息 进度 工具提示 信息栏 文本 概述 自动建议框 文本块 RTF 块 文本框 富编辑框 密码框 数字框 标签 内容链接 手写视图 样式 概述 颜色 版式 图标 概述 应用图标和徽标 Segoe MDL2 图标 亚克力 Mica 显示焦点 声音 写入样式 XAML 画笔 XAML 样式 XAML 控件模板 ResourceDictionary 和 XAML 资源引用 XAML 主题资源 间距 角半径 移动 概述 计时和缓动 方向性和引力 运动练习 页面过渡 连贯的动画 视差 XAML 中的动画 属性动画 情节提要动画 关键帧以及缓动函数动画 Shell Toast 通知 UX 指南 发送本地 Toast C# 应用 C++ UWP 应用 C++ WRL 应用 其他应用 Toast 内容 Content 架构 计划 toast 其他功能 自定义音频 进度条 挂起更新 自定义时间戳 集合 标头 通知侦听器 已过时 锁屏提醒通知 推送通知 概述 WNS 优先级 将 WNS 流量加入允许列表 由推送通知向导生成的代码 任务栏 将应用固定到任务栏 标题栏 动态磁贴 辅助磁贴 指南 固定到“开始”屏幕 固定到任务栏 桌面应用程序 磁贴内容 磁贴内容架构 特殊磁贴模板 发送本地磁贴通知 可追踪的磁贴通知 主要磁贴 API 磁贴和 Toast 通知的语言、比例和高对比度支持 杂项 通知可视化工具 通知传递方法 通知通道类型 使用 Webpush 和 VAPID 的备用通道 定期通知 输入和交互 概述 输入基础版 指针输入 凝视 笔和 Windows Ink 教程:向应用添加墨迹支持 识别笔划墨迹 存储和检索笔划墨迹 添加 InkToolbar 触摸 鼠标 Keyboard 访问键 键盘加速键 键盘事件 适用于键盘、手柄、遥控器和辅助功能工具的焦点导航 编程焦点导航 响应触摸键盘的存在 使用输入范围更改触摸键盘 文本输入 自定义文本输入 文本缩放 选择文本和图像 输入法编辑器 输入法编辑器要求 ......
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值