【问题标题】:Is there a way to implement .net like attributes on a c++/cx ref class?有没有办法在 c++/cx ref 类上实现类似 .net 的属性?
【发布时间】:2014-11-08 11:46:54
【问题描述】:

想知道是否有办法以类似于 .net 属性的方式在 c++/cx 引用类上实现属性。我试图从 Platform::Metadata::Attribute 类继承,这是一个抽象类,其他 WinRT 属性继承自该类。但是当我尝试使用该属性时,我得到的只是编译器错误。

【问题讨论】:

  • C++/CX 已经 .NET,我认为您的意思是 C# 的属性?
  • 当然。我不知道 c++/cx 是 .net
  • C++/CX 不是 .NET,它是 Windows 运行时。
  • 我是这么想的

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


【解决方案1】:

您可以使用现有的属性,但不能创建任何新的属性类型。这是 WinRT 的限制。来自MSDN的引用:

属性

属性是可以应用于任何 Windows 运行时类型或类型成员的元数据值,并且可以在运行时进行检查。 Windows 运行时在 Windows::Foundation::Metadata 命名空间中定义了一组通用属性。 此版本中的 Windows 运行时不支持公共接口上的用户定义属性。

【讨论】:

  • 谢谢。我自己找不到。
【解决方案2】:

WinRT 和 C++/CX 都不支持属性。 Platform::Metadata::Attribute 命名空间存在的唯一原因是它们可以出现在 .winmd 文件中。编译器可以使用哪些元数据文件来读取以另一种语言编写的 WinRT 定义的声明。这只对这样的编译器或对象浏览器有用,比如 Visual Studio 中的那个。 .winmd 文件是从 .idl 文件创建的,非常类似于在 COM 和类型库中创建的方式。或者由编译器生成。

只有两个这样的属性。 DefaultAttribute 对应[default] IDL 属性,FlagsAttribute 对应[flags]。它们尚未在 MSDN 上记录,WinRT 文档通常非常缺乏。 [default] 以前存在,但有了新的含义。 [flags] 是新的,意味着它在 .NET 中的作用相同。您可以在计算机上 C:\Program Files (x86)\Windows Kits\8.1\Include\winrt 目录中的 *.idl 文件中看到这两个属性的大量使用示例。

从这些 IDL 文件中您还可以看到,WinRT 实际上并不支持方法重载、泛型、实现继承或异常。它们是语言投影添加的功能。 WinRT 的核心仍然是很多,就像旧的 COM。工具中有很多巧妙的代码隐藏了这一点。就像 C++/CX 一样。这也是 Javascript 可以直接调用 C++ 的核心原因,尽管它们的运行时实现截然不同。所需的胶水很薄。

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 2016-05-05
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2016-10-18
    • 2013-04-21
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多