C++/CX轻松入门

C++/CX简介

C++/CX是微软为Windows Store和Windows Phone Store应用开发者提供的一种native开发语言,它是C++的一个Extension,也就是说,它是兼容C++的。

从名字可以看出,C++/CX包含了C++,又包含了C++的extension。CX的X表示的意思跟DirectX和ActiveX等技术中的X类似,就是表示C++ extension中的各种技术。

C++/CX不仅兼容ISO C++,也兼容STL。

对于喜欢C++的Native开发者,在Windows Store应用开发或者Windows phone Store应用开发过程中,了解一些C++/CX对于程序的理解还是有帮助的。

需要强调的是C++/CX只是一个wrapper,这个wrapper可以是很薄的,也就是说对于开发者来说,应用绝大多数的代码都可以是标准C++,只有很少一部分是C++/CX的语法。

使用C++/CX和native开发的原因

C++/CX可以和XAML交互,也可以和其他语言如C#和VB等进行交互,而标准C++不可以。所以当我们使用C++开发,同时又需要和XAML或者其他语言交互时,我们就需要使用C++/CX。C++/CX兼容C++。

在Windows开发环境中,可能有些开发者更喜欢C#,或者HTML5+JS。也有些喜欢开发者喜欢native开发,一般有以下几个原因

1. 需要更有效率的程序

2. 有现有的C++/C的代码

3. 更熟悉C++的开发

4. 需要使用DirectX或其他仅支持C++的API. 目前在Windows Store和Windows Phone Store中,DirectX开发只能使用C++。

常用的C++ 11语法

虽然C++ 11有很多新特性,但在Windows商店应用开发时,不可避免会遇到的有下面这些:

1. auto关键字,如下: auto在这里有类型推导的作用,objA自动被判断为ClassA类型。

auto objA = new ClassA();

2. lamda表达式。Java和C#开发者可能很熟悉这一语法,但是很多C++开发者并不熟悉。

3. 空指针nullptr。在C++ 11中nullptr是已经存在的表示空指针的保留关键字,而不需要开发者宏定义一个NULL表示空指针。

4. 各种智能指针如unique_ptr, shared_ptr和weak_ptr

关于C++ 11标准可参考下面的链接

http://msdn.microsoft.com/en-us/library/hh279654.aspx

http://www.codeproject.com/Articles/570638/Ten-Cplusplus11-Features-Every-Cplusplus-Developer

使用C++/CX必须会的语法

1. ref new. 对于Windows RT类型,必须使用ref new来生成对象,如下。ref表示有引用计数,即C++/CX通过引用计数自动的管理对象的生命周期。

auto calendarA = ref new Calendar;

calendarA->SetToNow(); //使用指针方式调用

2. ref class对于自定义的class,如果也希望自动使用引用计数管理对象,则在class定义前加ref,如下:

ref class ClassExample {

...

};

3. ^. 有引用计数的指针的表示方法。如下:

Calendar^ calendarB = ref new Calendar;

calendarB->SetToNow();

(*calendarB).SetToNow();  //此处和标准C++使用方法相同,都是用*

只要理解ref和^,同时会使用ISO C++ 11就可以读懂和使用C++/CX代码了。遇到不熟悉的地方再查。

ref指针点评

ref和^这两个点应该是C++/CX相对于标准C++最大的变化了,对于很多标准C++开发者刚看到的时候不是很习惯。虽然标准C++也有智能指针,但是C++/CX中的ref指针还是有些亮点的,例如:ref指针的size和一个普通指针(raw pointer)的size是一样的,也可跟标准C++一样使用cast。如下。从这两点来说,C++/CX的指针似乎又更接近多年前我们学习的C++指针。

RefChild^ refChild = ref new RefChild();

RefParent^ pParent = refChild; // 以子类对象初始化父类指针

try

{

RefChild^ pChild = dynamic_cast<RefChild^>(pParent);

pChild->MethodFromChild();

}

catch (const std::bad_cast& e)

{

cerr << e.what() << ‘\n‘;

cerr << "这个类型不是子类的\n";

}   // 类型安全的,自然的指针

C++/CX引用计数原理示例:

{

auto p1 = ref new RefParent();  // parent对象的引用计数加1,成为1. (parent AddRef())

auto p2 = ref new RefChild();    // child对象的引用计数加1,成为1   (child AddRef())

// parent对象引用计数减1,释放parent对象. (parent Release)

// child对象引用计数加1,成为2 (Child AddRef())

p1 = p2;

// child对象的引用计数减1,成为1 (child Release())

p1 = nullptr;

}  // child Release()

先就说这么多吧,欢迎交流指点。

时间: 2024-10-05 07:27:17

C++/CX轻松入门的相关文章

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina等网页的小demo,如果对swift的语法不感兴趣的同学可以直接跳到第二部分来感受下Swift的魅力-(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing) 一.Swift常用语法 Swift是Apple去年推出的一门新的语言,基于C和Objective-C,而没有C的一些兼容约束,它采用了安全的编程模式和添加现代的功能

JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对象只能通过特定的接口访问,这也是面向接口编程思想的一部分. 封装是面向对象编程里非常重要的一部分,让我们来看看没有封装的代码是什么样的: 1 function Dog(){ 2 this.hairColor = '白色';//string 3 this.breed = '贵宾';//string 4 this

C++ STL编程轻松入门

 图1.STL和c++标准模板库 作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情. 1. "什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清楚,也决非易事.因此,如果你在看完本节之后还是觉得似懂非懂,

UML之轻松入门(4)-OCP做一个上进的厨子

在上一章节,我们讨论了面向对象设计(OOD)5大特性之一的SRP原则.这一节,我们来看另一重要的原则:OCP原则(开放-闭合原则). Software entity should be open for extension, but closed for modification  上节回顾: 1.UML之轻松入门(1)-类图(附:java Comparable接口与Comparator接口用法) http://blog.csdn.net/woyunowuyuda/article/details

MongoDB游记之轻松入门到进阶》代码下载

<MongoDB游记之轻松入门到进阶>代码下载,看看有没有用 http://pan.baidu.com/s/1boKG28R https://item.jd.com/12236244.html MongoDB作为最受欢迎的文档存储类型的NoSQL数据库,越来越多的公司在使用它.本书以符合初学者的思维方式,系统全面.层层递进地介绍了MongoDB数据库,通过本书的学习,读者能够胜任实际工作环境中MongoDB的相关开发管理工作. 本书共分四个部分23章,第一部分讲解了MongoDB的相关概念和原

Netty实践(一):轻松入门

前言 Netty作为目前世界上最流行的NIO框架之一,在功能.性能.健壮性方面首屈一指,而且在很多项目中得到验证,比如消息中间件RocketMQ.分布式通信框架Dubbox.Netty内部实现复杂,但是提供给外界的API却十分简单,轻松的让我们的网络处理代码和业务逻辑处理代码分离开,从而快速的开发网络应用. 如果你还不了解JAVA NIO,JAVA SOCKET,可以先参考博主以前关于这方面的博客:<走进Java NIO的世界>.<Java NIO 服务器与客户端实现文件下载>.&

ibatis轻松入门

近日,由于公司项目应用开发的逻辑层使用的是iBatis.上网查了些资料,自己写了点demo入门.感觉良好.iBatis实在是比Hibernate很容易入门,贡献出来与各路菜鸟分享(后文附源码),希望得到大神指教.转载请保留本文出处:http://itred.cnblogs.com ; 作者:itRed. ORM框架中操作数据库的逻辑层中,Hibernate和iBatis相对来说是比较受欢迎的.Hibernate是“全自动”的,能够完全生成SQL语句:而iBatis是“半自动化”的,需要程序员根据

UML之轻松入门(3)-SRP做好厨子,让别人编程去吧

一个厨子可以做出一手好菜,也许他是新东方毕业的或者是祖传秘方.你让他做上一桌佳肴那是简单.快乐而又高效的,然而让他编程就会成为一种苦恼并且让人想不通的一件事.也许这个比喻不是很恰当,但是对于每个类来说,他们就像一个一个的actor,也许是厨子也许是司机,他们应该关注于自己的领域,这样会更加高效而且简明.源于这一思想,我们发现了SRP这个原则,即:单一职责原则. There should never be more than one reason for a class to change  既然

C++ STL编程轻松入门【转载】

1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL "什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清楚,也决非易事.因此,如果你在看完本节之后还是觉得似懂非懂,大可不必着急,在阅读了后续内容之后,相信你对STL的认识,将会愈加清晰.准确和完整.不过,上述这番话听起来是否有点像是在为自己糟糕的表达能力开脱罪责呢?:) 不知道你是否有过这样的经历.在你准备着手完成数据结构老师所布置的家庭作业时