C ++ / CX限制

时间:2011-12-05 15:24:35

标签: c++ windows-8 windows-runtime c++-cx

我想用C ++ / CX语法编写一个库,并在其他项目中使用它。

如您所知,普通的旧数据结构不能包含任何方法或运算符,因此我们必须在另一个类中编写静态方法以提供行为。

我们也不能写这样的代码:

private:
    int _D;
public:
    property int& D { int& get() {return _D;}}

或将此属性传递给这样的方法:

void SampleMethod(int& d);

我不知道为什么Windows运行时库有这些限制。

如何在.lib文件中编译C ++ / CX和Windows运行时扩展?或者我如何在另一个项目中预编译整个WRL项目的代码文件?

2 个答案:

答案 0 :(得分:4)

WinRT是一种用于跨语言使用的ABI - 至少是C ++,C#,VB和JS。出于这个原因,它提供的结构仅限于可以用这些语言直接表示的结构 - 例如,如果你通过引用返回,C#代码将如何使用它?

如果你想用C ++编写一个静态库只供C ++使用,我的建议是尽可能避免语言扩展,只保留那些你必须传递WinRT对象的地方。从完整的C ++ / CX开始,你将在这种情况下获得好处。

答案 1 :(得分:3)

与C ++不同,其中" struct"基本上是"一个所有成员都是公共的类,在Windows运行时,#34; struct"是一种值类型。因此,它不能有任何方法,包括属性访问器(值类型不能有方法)。

此外,因为结构是值类型,所以它们总是按值传递。这意味着将结构传递给方法需要复制结构的内容(值类型意味着每个使用者都在自己的数据类型副本上运行)。因此,结构应该相当小(想想"低于16字节")。

如果需要传递更大的对象,请使用类 - 类通过引用传递,因此可以保存任意数量的数据。