Russian Qt Forum

Программирование => Общий => Тема начата: aspirant от Январь 12, 2011, 11:26



Название: Динамическое формирование П.О. на основе C++Struct
Отправлено: aspirant от Январь 12, 2011, 11:26
Здравствуйте.

Есть такое Т.З.:
Нужно обрабатывать бинарный файл с пакетами данных, (каждый пакет данных состоит из набора разнотипных полей). Далее под каждый тип пакета данных требуется динамически создавать таблицу в БД PostgreSQL 8.3.7 и записывать в нее все данные из всех пакетов данного типа.

Вся гадость в том, что каждый бинарный фаил может состоять из своего набора типов пакетов, различающихся названиями, перечнем и типами полей. К каждому бинарному файлу есть описания всех пакетов, из которых состоит файл. Эти описания поставляются в виде C++ структур в С++ файле с расширением *.h.

Самое лучшее, что я смог придумать - это самому написать некий аналог транслятора, который бы смог разобрать C++ код в файле *.h, выбрать оттуда все описания структур Struct, разобрать из их описаний все входящие в состав структур поля и их типы, и далее на основе выбранной информации производить обработку бинарника и работу с БД. Только этот путь оказался очень непростым, поскольку постоянно приходится вводить в свой "транслятор" какие-то раннее не учтенные типы данных или например разбор директивы #define.

Может быть я пытаюсь изобрести велосипед?
И кто-то сможет подсказать какие-то встроенные средства Qt или еще что-то, что сможет упростить процедуру анализа структур в файле *.h?


Название: Re: Динамическое формирование П.О. на основе C++Struct
Отправлено: brankovic от Январь 12, 2011, 16:11
А нельзя ли эти заголовки вручную/скриптом перевести в читаемый программой формат заранее?

Чтобы не переписывать C++ препроцессор использовал g++ -E, ещё есть boost wave (библиотека-препроцессор C++). Но даже если отбросить препроцессор, полный разбор C++ задача титаническая.


Название: Re: Динамическое формирование П.О. на основе C++Struct
Отправлено: Waryable от Январь 13, 2011, 18:26
Цитировать
Но даже если отбросить препроцессор, полный разбор C++ задача титаническая.
Ну вроде бы как полноценный и не надо. Ловить только struct и дальше парсить блок структуры.