Как стать автором
Обновить

Комментарии 9

Потому что в плюсах такого нет, ну и плюс мне самому был интересен проект.

Подскажите, поддерживает ли ваша рефлексия работу с шаблонами?

И ещё вопрос - используете ли вы clang парсер для пирсинга кода в MetaGenerator?

1. Есть поддержка шаблонов, но только если они специализированны типами.

2. Для парсинга используются регулярные выражения (PCRE2).

Подскажите, поддерживает ли ваша рефлексия работу с шаблонами?

И ещё вопрос - используете ли вы clang парсер для парсинга кода в MetaGenerator?

Странно, что автор не упоминает CINT- C++ интерпретатор, созданный Masaharu Goto в 1995 году, и ставший основанием системы ROOT https://root.cern.ch/ и который позволил реализовать динамическую рефлексию и все то, что реализовано в С# ( сериализация, метаинформация о классе и пр.) задолго до появления самого С#.

Авторы, и я один из них, давно поддерживают связи с Бьярне Страустрапом, и один из них участвовал в создании LLVM/clang. Одним из основных препятствий по внедрению нашего подхода в С++ стандарт, было требование наследования всех классов из базового класса TObject, как это было реализовано потом в С#, где даже элементарные типы, типа integer, наследуются от класса Object. Очевидно, что такое введение полностью разрушило бы совместимость со старыми версиями С++. К счастью, не так давно, Bjarn Stroustrap и Herb Sutter предложили реализацию динамической рефлексии на основе attributes, не нарушая, при этом, обратной совместимости со старыми версиями С++. На Хабре была публикация на эту тему. Стоит надеяться, что динамическая рефлексия появится в С++26 стандарте, что значительно расширит возможности языка.

Так напишите статью про вашу систему. Такие темы всегда интересны, даже если реализации не получили массового распространения.

Если я правильно понимаю что разбор смещений и прочего тут реализован в отрыве от компилятора, верно? По идее можно использовать отладочные символы для более точного соответствия, а то если компиляторы разные или настройки чуть нестандартны то быть беде

Смещение вычисляется в рантайме (во время инициализации Type), при помощи функции аналогичной offsetof, поэтому проблем быть не должно. 

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации