如何在类中声明静态字段

时间:2014-11-26 17:28:10

标签: windows-phone-8 c++-cli

我有一个XAML + DirectX应用程序,我想在我的“interop”类中添加静态字段:

[Windows::Foundation::Metadata::WebHostHidden]
public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler
{
public:
    static int VALUE = 0;
    ...
};

它没有编译说“只能在类中初始化静态const积分数据成员”。

如果我将其更改为const static int VALUE = 0;,那么它仍然无法编译并显示错误“非值类型不能包含任何公共数据成员

我做错了什么?

1 个答案:

答案 0 :(得分:1)

WinRT公共类有许多限制,以确保它们可以被多种语言使用,包括C ++,JavaScript和C#。这就是您收到错误C3984的原因。您不能拥有公共字段,而必须使用properties。您将其设为只读属性:

property int VALUE
{
    int get() { return 0; }
}

重要的是要记住,属性是函数调用,并且通常无法优化,因此在设计接口时应考虑这一点。

如果您打算让此类仅可由C ++使用,请考虑不使用WinRT类,而是使用您使用std::unique_ptrstd::shared_ptr管理生命周期的简单C ++类。在这种情况下,您当然可以一如既往地使用公共字段方法。

您遇到的最初问题是一般的C ++语言限制,不是特定于WinRT的。错误C2864(您在发布的文本中使用VS 2012)在VS2013中使用C ++ 11时更为通用。