码迷,mamicode.com
首页 > 编程语言 > 详细

C++/CX轻松入门

时间:2014-09-23 21:30:45      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   io   os   使用   java   ar   strong   

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()

 

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

 

C++/CX轻松入门

标签:style   http   color   io   os   使用   java   ar   strong   

原文地址:http://www.cnblogs.com/dingshengdx/p/3989080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!