Нужно знать о хорошем API отражения C ++ (для идентификации RuntimeType -RTTI и вызовов времени выполнения) - PullRequest
1 голос
/ 26 мая 2010

Мне нужен хороший C ++ Reflection API (например, Microsoft API), который позволяет мне определять типы (класс, структура, enum, int, float, double и т. Д.), Идентифицированные во время выполнения, объявлять их и вызывать методы тех типы во время выполнения.

С уважением,

Усман

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Если вы пытаетесь добраться до архитектуры типа плагина, в библиотеке POCO по адресу http://pocoproject.org есть некоторые фрагменты, которые могут помочь вам в этом. Это позволит вам загрузить .dll или .so во время выполнения и создать содержащиеся в нем классы. Но вызывающему коду все еще нужен заголовочный файл, который описывает интерфейс (или абстрактный базовый класс), чтобы можно было получить сигнатуры методов.

0 голосов
/ 24 января 2012

C ++ - невероятно сложный язык. «Отражающие» API не были частью языкового дизайна, и поэтому, по сути, его там нет.

Если вам нужны «рефлексия» и «метапрограммирование» общего назначения, вы можете получить это, перейдя за пределы языка и используя систему преобразования программ (PTS) . Такой инструмент для ваших целей должен анализировать C ++ (более чем в одном модуле компиляции за раз), предоставлять вам доступ к всем структурам языка, что позволяет вам отражать, то есть определять тип (или другие свойства) любой конструкции (например, переменной, выражения или другой синтаксической конструкции) и позволяют применять произвольные модификации кода. Очевидно, что это не произойдет во время выполнения (хотя я полагаю, что вы могли бы раскошелиться на такой механизм, если бы вы настаивали).

Наш инструментарий реинжиниринга программного обеспечения DMS с C ++ Front End имеет проверенный опыт анализа и преобразования очень больших наборов кода C ++. См. технические документы для некоторых подробных случаев использования. Я не думаю, что другие инструменты на сайте Википедии обрабатывают C ++, хотя у них правильное мышление.

Хотя это на самом деле не PTS (без преобразований источника в источник), Clang тоже может работать. Я не уверен (так как я не использую все это), как он может собирать информацию о типах и использовать ее для запуска преобразований в исходный код. Очевидно, что очень хорошо использовать такую ​​информацию для генерации кода LLVM.

...