Здравствуйте, 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, из которого можно всё что угодно нагенерить