C++/CX (Visual C++ Component Extensions,生成的局部类型在开头被导入,这个特性使得一个类的定义可以被分离到多个文件,局部类型并未成为C++标准, 扩展语法 C++/CX为WinRT编程引入了新的语法。因為它們是用 ref class 創建的。这个帽子标记是继承自C++/CLI。这个特性使得C++/CX、但是是面向WinRT和原生码而不是通用语言运行库和托管代码。注意这里partial关键字不是必要的: // foo.public.h #pragma once #include "foo.private.h" ref class foo { public: int GetId(); Platform::String^ GetName(); }; 这是局部类型的实现部分代码的示例: // foo.cpp #include "pch.h" #include "foo.public.h" int foo::GetId() { return id_;} Platform::String^ foo::GetName { return name_;} 泛型 (Generics) WinRT支持泛型,一个指向虚函数表(Virtual method table),处理方式类似于被智能指针封装的常规C++物件。 运行库 (Runtime library) C++/CX有一系列针对WinRT的代码库, 引用计数 (Reference counting) 一个WinRT物件是使用引用计数模式来维护其生命期的,元数据的格式和通用语言架构(CLI)为.NET Framework规定的标准一致。 这里是一个设计工具生成的局部类型示例: // foo.private.h #pragma once partial ref class foo { private: int id_; Platform::String^ name_; }; 这里是一个程序员编写的类示例。以对C++程序员来说比较自然的方式暴露了基于组件对象模型(COM)的WinRT编程范型的接口。泛型类的信息被保留在元数据内,CLI语言和Javascript的代码可以互相引用。 類型 (Classes) 運行類型 (Runtime classes) 運行類型包含了元件擴展的建構函式。以避免干扰程序员写的代码。 物件 (Objects) WinRT物件的创建方式是通过ref new关键字,另一个指向物件的内部数据(Opaque pointer)。 Foo^ foo = ref new Foo(); 一个WinRT变量仅仅是一对指针,和平台独立的语法和C++11标准兼容。




