UWP C++/CX开荒记 第一回 C++/CX简介
什么是C++/CX?
C++/CX是微软对C++的拓展,老实说,C++本来已经够庞大了,这次拓展更为严重,直接更改语言习惯了,为了适应通用平台,就要适应这种语法的改变。
拓展项目
基本类型
基本类型一般情况是自动转换的,类型列表参照C#的,规范来写就是int32,int64这种的,但你写成int,__int64也无妨。基本类型已经自动重载了+运算符,可自动将值转换为字符串,但如果出现变量相加的情况需要调用ToString()函数(很像java),当然加号括号也是可以的,但是涉及到不同类型的变量相加,保险是需要调用函数转换字符串的。拓展引用类型ref 与 ^
在C++/CX中除了包含标准C++类库之外还增添了通用运行时类库,二者区别在于有没有ref声明,所有用ref声明的类在实例化的时候需要使用ref new,对应的指针类型是^,用于区分的标记,当然STL的迭代器是兼容^的,访问ref class的对象的成员和指针类型一样需要用箭头->。关键字property
成员变量修饰符,可内置get和set方法过滤输入和输出数据,常用来绑定XAML控件,具体实现很像C#,但是标准一点的做法是创建一个内部变量,最后通过属性返回其引用。关键字event
成员变量修饰符,用于触发传递函数启动信号,主要用于添加监听函数,例如单击事件处理函数,播放事件处理函数。关键字sealed
类的声明限定符,表示密封类型,已经密封的类将不能被继承。但是密封是公有化属性的必要条件。- 关键字internal
成员变量修饰符,表示组件内部公用,外部无法访问,常用作性能优化。也用作兼容性public。 - 其他
其它诸如订阅类型不在讨论范围内。请参阅Visual C++语言参考(C++/CX)
拓展的坑
开发过程中最恼人就是类型的问题,密封类不能被继承,非密封类不能有公有变量,MFC的话大都可以进行继承然后修改相应的功能,导致不能像C#那样做到继承页面,进行模板化开发。不过习惯巧妙利用全局变量和XAML的资源字典以及绑定机制可以最大限度地进行代码重用。这个过程必然是痛苦的,但也是开发高性能应用的必经之路。