Re[36]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.09.25 10:41
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Внешних ссылок нету, но словесное описание дать могу. Эти подходы насчитывают уже почтенную историю и находятся в постоянном развитии.


R>Сначала была целая эпоха декларативных описаний. Результатом таких декларативных описаний были обычные классы (структуры) C++, сопровождаемые метаданными — возможности доступа к полям структур по индексам и получение строковых представлений имён. Зачастую в метаданные включались средства форматного контроля и версионирования. Поверх таких структур можно было делать унифицированные обработки типа ввода-вывода, сериализации и пр. Пример такого декларативноного описания вот:


R>
R>   STRUCT_BEGIN(Expiration)
R>   //...
R>   STRUCT_END(Expiration)
R>


Ну, а) макросы, б) ты описываешь свои данные, а не чужие, заданные кем-то другим даже не в виде перечислений, а тупо макросами


R>Очевидным недостатком этого подхода является использование макросов, от которых хотелось бы избавиться вовсе.


Ну, лично я против умеренного использования макросов ничего не имею


R>Сейчас вся эта кухня движется в сторону "чистых" структур без макросов с использованием компайл-тайм рефлексии. Эти подходы частично перекликаются с теми, которые используются в boost::mpl.


Ну, я бы не стал так делать, очень не прозрачно всё выглядит.

Я предпочитаю запиливать внешние инструменты. Вот сейчас понадобилось метаданные к сишечке прикрутить — нашел такой CastXML, который пилят создатели CMake, это наследник GCC-XML (там, на самом деле, кроме названия, ничего особо не поменялось, по крайней мере, видимого с наружи — они похоже движ с GCC на Clang только перевели). Так вот, CastXML умеет извлекать из кода структуры, объединения, перечисления, тайпдефы, и складывать это в XML, из которого можно всё что угодно нагенерить
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.