![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Задача: в проекте есть набор классов со сложной внутренней структурой.
Требуется реализовать принцип сохранения состояния объектов этих классов и восстановления этого состояния. Проблема только, что сейчас ещё неизвестно куда они будут сохраняться: XML, база данных (тоже неизвестно какая), может ещё что - а может нужно предложить пользователю все возможные варианты, чтобы сам выбрал. Вполне возможно, что будут появляться новые варианты уже после разработки и передачи системы заказчику. Т.е. сама операция "сохранения" (сериализации) будет реализована уже после реализации (и даже компиляции в проект) классов. Видимо это будет в виде shared library реализовано, но вот как его "внедрить" в архитектуру проектов на уровне классов Была мысль перегрузить operator>> и operator<< для каждого класса, причём несколько раз (для XML, для MYSQL*, PGSQL* и т.п.). Но тогда не получается реализовать идеологию c shared library: эти операторы же уже должны быть известны на стадии компиляции проекта. Никто похожими мыслями не озадачивался? Как решали? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Можно реализовать для каждого объекта метод save(IDataStorage*) и соответственно load(IDataStorage*).
Для сохранения передавать объектам по очереди объект IDataStorage, который можно реализовать в виде ком объекта, а на него уже возложить ф-ии сохранения. В принципе-то логика сохранения зависит от структуры объекта, а не от способа хранения данных. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
ZeusAtVingrad, посмотри в сторону boost::serialization. Эта библиотека спроектированна так, что процесс сериализации отдельных объектов отделён от процесса преобразования данных для записи в само хранилище. Поддерживает как минимум три формата сериализации(text, binary, xml) и позволяет использовать другие форматы(реализуется очень просто). С shared library подружить тоже будет очень просто.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |