reflection - C++/WinRT 中有哪些反射机制?
问题描述
我记得 C++ 在 Bjarne Stroustrup 的原始The C++ Programming Language之后的某个时间添加了一些运行时类型信息 (RTTI) ,但我从来没有打电话使用它。
我熟悉一些 COM 和 CLR 反射 API,包括 ITypeInfo 和 System.Reflection。这些是否适用于编译的 C++/WinRT 应用程序中声明的类型?
这个问题解决了 5 年前 C++/CX 的一个类似问题,有变化吗?
解决方案
C++ /WinRT 不会添加到 C++ 的本机反射功能。但是,xlang 元数据读取器 API 可用于检查描述 WinRT 类型的 Windows 运行时元数据文件 (.winmd)。您可以在此处查看元数据阅读器库(并且在此 repo 中的各种工具中有使用示例):
https://github.com/Microsoft/xlang/blob/master/src/library/meta_reader.h
您可以将它与 Windows 函数 RoGetMetadataFile 结合使用,以在运行时定位类型的元数据。
请注意,C++ /WinRT 本身在运行时不使用 winmd 文件,因此,使用 C++ /WinRT 构建的代码不需要 winmd 在运行时可用。如果 winmd 不存在,您将无法依赖它来获取类型信息。
如果为用 C++ /WinRT 编写的类型提供元数据文件,则 .NET 运行时可以使用 winmd 反映投影类型,其方式与它可以反映使用 .NET 运行时编写的类型大致相同。
C++ /WinRT 目前不提供对类型的动态调用的任何支持。这是一个不常见但反复出现的问题,并且在我们的积压工作中。
谢谢,
本
推荐阅读
- apache-spark - Spark将毫秒转换为UTC日期时间
- python - 在 matplotlib 3d 中旋转 stl 文件
- azure-devops - Copy pull request description to work item comments on Azure Devops
- css - 其他人编写的自定义主题的wordpress样式问题
- spring - 在 @Around 建议中处理带有和不带有 @RequestBody 的请求
- c# - Redis 无法从 IIS 连接
- sql-server - 部署到服务器时 SSIS Power Query 数据源 Web API 提取错误
- sql - 如何删除嵌套 psql 数组中的 jsonb 项
- python - 如何在 scikit learn 中创建评分函数以考虑其他辅助变量?
- r - R中的线性回归库