Комментарии 9
Вопрос только в том, зачем это делать на C++.
Подскажите, поддерживает ли ваша рефлексия работу с шаблонами?
И ещё вопрос - используете ли вы clang парсер для пирсинга кода в MetaGenerator?
Подскажите, поддерживает ли ваша рефлексия работу с шаблонами?
И ещё вопрос - используете ли вы clang парсер для парсинга кода в MetaGenerator?
Странно, что автор не упоминает CINT- C++ интерпретатор, созданный Masaharu Goto в 1995 году, и ставший основанием системы ROOT https://root.cern.ch/ и который позволил реализовать динамическую рефлексию и все то, что реализовано в С# ( сериализация, метаинформация о классе и пр.) задолго до появления самого С#.
Авторы, и я один из них, давно поддерживают связи с Бьярне Страустрапом, и один из них участвовал в создании LLVM/clang. Одним из основных препятствий по внедрению нашего подхода в С++ стандарт, было требование наследования всех классов из базового класса TObject, как это было реализовано потом в С#, где даже элементарные типы, типа integer, наследуются от класса Object. Очевидно, что такое введение полностью разрушило бы совместимость со старыми версиями С++. К счастью, не так давно, Bjarn Stroustrap и Herb Sutter предложили реализацию динамической рефлексии на основе attributes, не нарушая, при этом, обратной совместимости со старыми версиями С++. На Хабре была публикация на эту тему. Стоит надеяться, что динамическая рефлексия появится в С++26 стандарте, что значительно расширит возможности языка.
Если я правильно понимаю что разбор смещений и прочего тут реализован в отрыве от компилятора, верно? По идее можно использовать отладочные символы для более точного соответствия, а то если компиляторы разные или настройки чуть нестандартны то быть беде
Динамическая рефлексия для C++