c++ /残雪的限制

C++/CX restrictions

本文关键字:残雪 c++      更新时间:2023-10-16

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

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

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

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

或将此属性传递给如下方法:

void SampleMethod(int& d);

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

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

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

如果你想用c++写一个静态库,只在c++中使用,我的建议是尽可能避免语言扩展,只在那些你必须传递WinRT对象的地方保留它们。在这种情况下,完全使用c++/CX对您没有任何好处。

不像c++, struct基本上是"一个所有成员都是公共的类",在windows运行时中,struct是一个值类型。因此,它不能有任何方法,包括属性访问器(值类型不能有方法)。

另外,因为结构体是值类型,所以它们总是按值传递。这意味着将结构体传递给方法需要复制该结构体的内容(值类型意味着每个消费者都在自己的数据类型副本上操作)。因此,结构体的大小应该相当小(考虑"小于16字节")。

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

相关文章: