C ++ / WinRT не добавляет собственных возможностей отражения C ++.Однако API-интерфейсы чтения метаданных xlang можно использовать для проверки файлов метаданных среды выполнения Windows (.winmd), которые описывают типы WinRT.Вы можете увидеть библиотеку чтения метаданных здесь (и есть примеры использования в различных инструментах в этом репо):
https://github.com/Microsoft/xlang/blob/master/src/library/meta_reader.h
Вы можете использовать это вместе с функцией Windows RoGetMetadataFileчтобы найти метаданные для типа во время выполнения.
https://docs.microsoft.com/en-us/windows/desktop/api/rometadataresolution/nf-rometadataresolution-rogetmetadatafile
Обратите внимание, что сам C ++ / WinRT не использует файл winmd во время выполнения и, как таковой, код, созданный с помощью C ++ / WinRTне требует, чтобы winmd был доступен во время выполнения.Если winmd отсутствует, вы не сможете использовать его для получения информации о типе.
Если файл метаданных предоставляется для типа, написанного на C ++ / WinRT, среда выполнения .NET может использоватьwinmd для отражения спроецированных типов во многом таким же образом, как он может отражать типы, написанные с использованием среды выполнения .NET.
C ++ / WinRT в настоящее время не обеспечивает никакой поддержки для динамического вызова типов.Это нечастый, но повторяющийся запрос, и он находится в нашем отставании.
Спасибо,
Бен