编辑“︁
C++/CX
”︁
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{unreferenced|time=2014-09-23T09:06:17+00:00}} '''C++/CX''' ''(Visual C++ Component Extensions,Visual C++ 组件扩展)'' 是微软的[[C++]][[编译器]]对C++的扩展,使得程序员可以比较方便地编写面向[[Windows Runtime]](''WinRT'')的程序。这个语言规范引入了一系列语法和类库抽象,以对C++程序员来说比较自然的方式暴露了基于[[组件对象模型]](COM)的WinRT编程范型的接口。 这个语言扩展从[[C++/CLI]]借用了语法,但是是面向WinRT和[[机器语言|原生码]]而不是[[通用语言运行库]]和[[托管代码]]。 == 扩展语法 == C++/CX为WinRT编程引入了新的语法。和平台独立的语法和[[C++11]]标准兼容。 === 物件 (Objects) === WinRT物件的创建方式是通过<code>ref new</code>关键字,并赋值给具有<code>^</code>(帽子)注记的类型的变量,这个帽子标记是继承自C++/CLI。 <syntaxhighlight lang="cpp"> Foo^ foo = ref new Foo(); </syntaxhighlight> 一个WinRT变量仅仅是一对指针,一个指向[[虚函数表]]([https://en.wikipedia.org/wiki/Virtual_method_table Virtual method table]{{Wayback|url=https://en.wikipedia.org/wiki/Virtual_method_table |date=20150210070233 }}),另一个指向物件的[[不透明指针|内部数据]]([https://en.wikipedia.org/wiki/Opaque_pointer Opaque pointer]{{Wayback|url=https://en.wikipedia.org/wiki/Opaque_pointer |date=20150816200426 }})。 ==== 引用计数 (Reference counting) ==== 一个WinRT物件是使用[[引用计数]]模式来维护其生命期的,处理方式类似于被[[智能指针]]封装的常规C++物件。物件在没有引用时销毁。尽管没有[[垃圾回收]]机制,但是语言规范也保留了gcnew关键字以备以后使用。 ==== 類型 (Classes) ==== ===== 運行類型 (Runtime classes) ===== 運行類型包含了元件擴展的建構函式。這類型也被簡單地稱為 ref classes,因為它們是用 <code>ref class</code> 創建的。 <syntaxhighlight lang="cpp"> public ref class MyClass { }; </syntaxhighlight> ===== 局部类型 (Partial classes) ===== C++/CX引入了局部类型的概念。这个特性使得一个类的定义可以被分离到多个文件,使得[[XAML]][[图形用户界面]]设计工具能够自动生成部分代码到一个单独的文件,以避免干扰程序员写的代码。这些局部类型在编译时合并。这个特性在类似[[C♯|C#]]之类的CLI语言中已经存在很多年。局部类型并未成为C++标准,所以并不能在纯C++11代码中使用。 这里是一个设计工具生成的局部类型示例: <syntaxhighlight lang="cpp"> // foo.private.h #pragma once partial ref class foo { private: int id_; Platform::String^ name_; }; </syntaxhighlight> 这里是一个程序员编写的类示例。生成的局部类型在开头被导入,注意这里<code>partial</code>关键字不是必要的: <syntaxhighlight lang="cpp"> // foo.public.h #pragma once #include "foo.private.h" ref class foo { public: int GetId(); Platform::String^ GetName(); }; </syntaxhighlight> 这是局部类型的实现部分代码的示例: <syntaxhighlight lang="cpp"> // foo.cpp #include "pch.h" #include "foo.public.h" int foo::GetId() {return id_;} Platform::String^ foo::GetName {return name_;} </syntaxhighlight> ==== 泛型 (Generics) ==== WinRT支持[[泛型]],所以C++/CX也支持。泛型类的信息被保留在元数据内,在运行时才实例化,而不是像[[C++模板]]那样在编译时示例化。编译器支持在一个类型中同时使用泛型和模板。 泛型类示例: <syntaxhighlight lang="cpp"> generic<typename T> public ref class bag { property T Item; }; </syntaxhighlight> == 元数据 (Metadata) == {{See also|CLI元数据}} 所有WinRT程序都通过[[元数据]]来描述其中的类型。元数据的格式和[[通用语言架构]](CLI)为[[.NET Framework]]规定的标准一致。这个特性使得C++/CX、[[CLI语言]]和Javascript的代码可以互相引用。 == 运行库 (Runtime library) == C++/CX有一系列针对WinRT的代码库,帮助C++程序员将使用[[C++標準程式庫]]的代码移植到WinRT. {{C语言}} [[Category:C++]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息