有没有办法在 c++/cx ref 类上实现类似 .net 的属性
Is there a way to implement .net like attributes on a c++/cx ref class?
想知道是否有一种方法可以以类似于.net属性的方式在c ++/cx ref类上实现属性。我尝试从 Platform::Metadata::Attribute
类继承,该类是其他 WinRT 属性继承的抽象类。但是当我尝试使用该属性时,我得到的只是编译器错误。
您可以使用现有属性,但不能创建任何新的属性类型。这是 WinRT 的限制。MSDN的一句话:
属性
属性是可应用于任何 Windows 运行时类型或类型成员的元数据值,并且可以在运行时进行检查。Windows 运行时在 Windows::Foundation::Metadata 命名空间中定义一组公共属性。在此版本中,Windows 运行时不支持公共接口上的用户定义属性。
WinRT 和 C++/CX 都不支持属性。 Platform::Metadata::Attribute 命名空间存在的唯一原因是因为它们可以出现在 .winmd 文件中。 哪些是编译器可用于读取以另一种语言编写的 WinRT 定义的声明的元数据文件。 这仅适用于这样的编译器或对象浏览器,例如Visual Studio中的编译器或对象浏览器。 .winmd 文件是从 .idl 文件创建的,与在 COM 和类型库中完成的方式非常相似。 或由编译器生成。
只有两个这样的属性。 DefaultAttribute 对应于 [default] IDL 属性,FlagsAttribute 对应于 [flags]。 它们尚未记录在MSDN上,WinRT文档通常非常缺乏。 [默认] 以前存在,但有了新的含义。 [flags] 是新的,意思与它在 .NET 中执行的操作相同。 您可以在计算机上的 C:\Program Files (x86(\Windows Kits\8.1\Include\winrt 目录中的 *.idl 文件中看到这两个属性的大量示例。
从这些 IDL 文件中可以看到的其他内容是,WinRT 实际上并不支持方法重载、泛型、实现继承或异常。 它们是语言投影添加的功能。 从本质上讲,WinRT仍然很像旧的COM。 工具中有很多聪明的代码隐藏了这一点。 就像C++/CX一样。 这也是Javascript可以直接调用C++的核心原因,即使它们的运行时实现截然不同。 所需的胶水非常稀。
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- TEA在VB.NET中的实现
- 有没有办法在 c++/cx ref 类上实现类似 .net 的属性
- . net实现的c++接口,暴露于COM
- C++是否等效于 .NET 的未实现异常?
- 有c++实现的Node.js . Net API吗?
- 如何在 VC++/CLI 中实现 VB.net 中定义的接口