Re[35]: The Big OOPs: Anatomy of a Thirty-five-year Mistake
От: rg45 СССР  
Дата: 27.09.25 10:04
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ну, было бы интересно посмотреть на твоё решение подобной проблемы. Может, ссылку конкретную дашь?


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

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

   STRUCT_BEGIN(Expiration)
      PRIMARY_KEY((contractYear, contractMonth), (std::optional<int>, std::optional<int>))
      FIELD(contractYear,        std::optional<int>, Pattern("\\d{1,2}"))
      FIELD(contractMonth,       std::optional<int>, Pattern("\\d{1,2}"))
      FIELD(expirationDate,      boost::gregorian::date, Expanded)
      FIELD(daysToExpiry,        int)
      FIELD(xmMaturityBucketID,  std::optional<int>)
      FIELD(teaBucketID,         std::optional<TeaBucketID>, VERSION(80))
      FIELD(contractDate,        boost::gregorian::date, ExtendedISO DEFAULT(_.expirationDate) VERSION(111))
      SECTION("S", series, SeriesMap)
   STRUCT_END(Expiration)


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

Сейчас вся эта кухня движется в сторону "чистых" структур без макросов с использованием компайл-тайм рефлексии. Эти подходы частично перекликаются с теми, которые используются в boost::mpl.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 27.09.2025 10:14 rg45 . Предыдущая версия . Еще …
Отредактировано 27.09.2025 10:10 rg45 . Предыдущая версия .
Отредактировано 27.09.2025 10:08 rg45 . Предыдущая версия .
Отредактировано 27.09.2025 10:07 rg45 . Предыдущая версия .
Отредактировано 27.09.2025 10:07 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.