Directx WinRT中的公共值结构

Directx WinRT中的公共值结构,directx,windows-runtime,c++-cx,Directx,Windows Runtime,C++ Cx,为什么“公共值结构”不能有任何方法或构造函数,而“值结构”可以? 如何在WinRT组件库中编写“Vector3”这样的结构,并在另一个WinRT应用程序中使用它?值类型/结构映射为内存的“块”,与传统的C结构非常相似,而不是.Net的实现,即:可以包含字段和方法 因此,值类型中只需要有字段或构造函数 您需要将Vector3分为两部分,其中一部分的数据可能称为Vector3Data,Vector3具有处理该数据所需的所有方法。当您将结构声明为“public”时,您将其声明为windows运行时结构

为什么“公共值结构”不能有任何方法或构造函数,而“值结构”可以?
如何在WinRT组件库中编写“Vector3”这样的结构,并在另一个WinRT应用程序中使用它?

值类型/结构映射为内存的“块”,与传统的C结构非常相似,而不是.Net的实现,即:可以包含字段和方法

因此,值类型中只需要有字段或构造函数


您需要将Vector3分为两部分,其中一部分的数据可能称为Vector3Data,Vector3具有处理该数据所需的所有方法。

当您将结构声明为“public”时,您将其声明为windows运行时结构。windows运行时中的结构是值类型。它们不能有方法(或构造函数)

它们也由可能不是您想要的值进行封送


您可能希望创建一个类而不是结构。

+1。但是,从性能的角度来看,将数据和方法拆分为结构和类可能比在这种情况下拥有类要好(即,
Vector3
)。顺便问一下,WinRT中的结构和类是否与.NET类似,只有结构可以在堆栈上分配(因此,速度更快)?结构是值类型,因此通常只在堆栈上分配,但在某些情况下它们会在堆上分配(例如,结构数组)。但是因为它们是值类型,所以它们是按值传递的——这意味着如果您编写一个接受结构的API,结构内容会在堆栈上复制到被调用方。这可能非常昂贵。因此,.NET和WinRT中的情况类似。结构的分配更便宜(差别应该更大,因为托管堆上的分配要便宜得多),而复制比引用类型更昂贵,尤其是在大小较大的情况下。应该使用分析。值类型不能有构造函数。这是在语言(例如C#)中施加的限制(敏感性),但其他语言不施加此限制@spgennard AFAK,这是WinRT对公共值类型的限制。C#允许构造函数带有参数,并且总是创建无参数构造函数。您提到的限制是,在C#中,不可能显式声明没有参数的构造函数。与此主题相关的一些有趣的功能建议: