Modern-C++-Reflektionsbibliothek

Ich bin daran interessiert, eine Reflexionsbibliothek mit meinem Code zu verwenden, ohne auf Details einzugehen, ich bin daran interessiert zu verstehen, was da draußen verfügbar ist, Stärken und Schwächen usw.

Bisher ist mir aufgefallen:

  • CAMP - halb aufgegeben, seit fast einem Jahr keine Verpflichtungen.
  • Ponder - Eine CAMP-Gabel, die aktiver zu sein scheint.
  • XM - Viertel aufgegeben, keine Commits seit einem halben Jahr, als ich dies schreibe.
  • CppRefl - noch nicht ausgecheckt.
  • (non-)Boost.Reflect – Eine Bibliothek im Boost-Stil, die nicht Teil von Boost selbst ist.
  • Boost.Mirror – Eine Bibliothek im Boost-Stil, die nicht Teil von Boost selbst ist.
  • Mirror C++ Reflection Utilities Ein weiterer Boost-ähnlicher, aber nicht Teil von Boost. Scheint 2011 aufgegeben worden zu sein.

Ich konnte weder eine vergleichende Bewertung noch eine Empfehlung von jemandem finden, der Erfahrung mit der Arbeit mit ihnen hat. Empfehlen Sie also bitte eine dieser Bibliotheken oder eine andere Reflexionsbibliothek, die Sie kennen (oder empfehlen Sie eine Gegenempfehlung).

Anmerkungen:

  • Ich bevorzuge Bibliotheken, die C++11 oder C++14 erfordern (und daher weniger hässlich und verworren sind).
  • Die Abhängigkeit von Boost ist (widerwillig) akzeptabel, ebenso wie die Abhängigkeit von jeder anderen (hoffentlich nicht-esoterischen) Bibliothek.
Es ist schwierig, in C++ zu reflektieren . Wenn Sie bereit sind, die Sprache zu verlassen (dies kann Ihre "nicht-esoterische" Anforderung verfehlen), können Sie vollständigen Metaprogrammierungszugriff auf jeden Aspekt des C++-Quellcodes erhalten. Siehe programers.stackexchange.com/questions/257266/…
@IraBaxter: Der Quellcode interessiert mich nicht, nur was der Quellcode darstellt. Und ich möchte die Quelle auch nicht transformieren, obwohl ich annehme, dass eine Art Quellentransformator (mit einem großen M) relevant sein könnte .
Einverstanden, dass Sie den Quellcodetext nicht manipulieren möchten . Der Sinn des von mir erwähnten Tools besteht darin, dass es einen programmatischen Aspekt für die Codestruktur (als AST) und (out of the box) für alle Fakten bietet, die Sie in einer Reflexionswelt als Datenstrukturen fragen könnten . Für exotischere Fragen zum Code können sie in diesem Framework als benutzerdefinierte Analysatoren implementiert werden. Natürlich stellt sich immer die Frage, was Sie mit den Antworten anfangen wollen ; oft ist es "das Verhalten des Codes ändern", was durch Quelltransformation erfolgen kann.

Antworten (1)

Da ist Antony Polukhins

magic_get

jetzt bekannt als „Präzise und flache Reflexion“. Auf der CppCon 2016 hielt er einen Vortrag über diese Bibliothek: https://www.youtube.com/watch?v=abdeAew3gmQ

Es ermöglicht ein wenig Reflexion. Es ist ein wunderbarer Hack, deckt aber nicht ab, was ich brauche.