Библиотека отражения Modern-C++

Я заинтересован в использовании библиотеки отражения с моим кодом, не вдаваясь в подробности, мне интересно понять, что там доступно, сильные и слабые стороны и т. д.

До сих пор я заметил:

  • CAMP — полузаброшенный, почти год никаких коммитов.
  • Ponder — форк CAMP, который кажется более активным.
  • XM — заброшен на четверть, на момент написания этой статьи никаких коммитов не было уже полгода.
  • CppRefl - еще не проверял.
  • (не)Boost.Reflect — библиотека в стиле boost, которая не является частью самого Boost.
  • Boost.Mirror — библиотека в стиле boost, которая не является частью самого Boost.
  • Mirror C++ Reflection Utilities Еще одна утилита в стиле Boost, но не являющаяся частью Boost. Вроде заброшен в 2011 году.

Я не мог найти сравнительный обзор этих или рекомендацию от кого-то, кто имел опыт работы с ними. Поэтому, пожалуйста, порекомендуйте (или встречно порекомендуйте) одну из них или любую другую библиотеку отражения, о которой вы знаете.

Заметки:

  • Я предпочитаю библиотеки, которые требуют C++11 или C++14 (и, следовательно, менее уродливые и запутанные).
  • Зависимость от Boost (неохотно) приемлема, как и зависимость от любой другой (надеюсь, неэзотерической) библиотеки.
Трудно сделать отражение внутри C++. Если вы хотите выйти за пределы языка (это может не соответствовать вашим «неэзотерическим» требованиям), вы можете получить полный доступ к метапрограммированию ко всем аспектам исходного кода C++. См.programrs.stackexchange.com/ questions/257266/…
@IraBaxter: меня не волнует исходный код, только то, что представляет собой исходный код. И преобразовывать источник я тоже не хочу, хотя полагаю, что какой-то преобразователь источника может быть уместен (с большой буквы М).
Согласитесь, вы не хотите манипулировать текстом исходного кода . Суть инструмента, о котором я упоминал, заключается в том, что он обеспечивает программный аспект структуры кода ( в виде AST) и (из коробки) всех фактов, которые вы могли бы рассмотреть в мире отражения как структуры данных . Для более экзотических вопросов о коде они могут быть реализованы в виде пользовательских анализаторов в этом фреймворке. Конечно, всегда возникает вопрос, что вы хотите делать с полученными ответами; часто это «изменить поведение кода», что можно сделать путем преобразования исходного кода.

Ответы (1)

Есть Антоний Полухин.

magic_get

теперь известный как «Точное и плоское отражение». Он рассказал об этой библиотеке на CppCon 2016: https://www.youtube.com/watch?v=abdeAew3gmQ.

Это позволяет немного поразмышлять . Это замечательный хак, но он не охватывает то, что мне нужно.