Страница 1 из 1

Как осуществить хранение информации об объектах (С++)?

Добавлено: 25 ноя 2010, 16:19
Dragon
Задача следующая. Есть некий класс со следующими полями:
string name
string type
int num

У этого класса есть наследник, получающий 2 опциональных поля:
string optional_name
int optional_num

Эти объекты группируются по категориям (Категория 1, Категория 2 и т.д.). В каждой категории может быть неограниченное кол-во объектов обоих типов. Всего пока насчитывается порядка 200-300 объектов, будет ли увеличение неизвестно.
Суть программы - просмотр содержимого объектов (одного объекта, принадлежащих определенной категории, всех объектов). Возможность добавлять новые объекты в разные категории. Удалять существующие.

Вопрос же в следующем: как хранить уже существующую информацию?

Думал в базе данных, но объектов не так уж и много. Есть вариант хранения в файле, правда не понятно как их оттуда вытаскивать в соответствии с задачами (как вариант 1 объект - 1 строка, и вытаскивать распарсивая строки).
Вобщем, обмозговывая данную ситуацию пришел к следующему - к (де)сериализации. Но, насколько мне известно, в С++ этого нету. Есть вроде бы в библиотеку boost, но я с бустом не работал, да и пишут в интернетах, что не очень эффективно по скорости (скорость немного важна). Нашел еще решение, предложенное гугглом - google protobuf, но он мне не понравился следующими вещами:
- нету поддержки наследования
- нужно предварительно формировать .proto файл, потом его компилить и на его основе создастя необходимый мне класс

Есть ли какие-нибудь оптимальные методы (де)сериализации или хранения информации об объектах между работой программы, где по их реализацию почитать можно (может кто-то поделиться своей или общепризнанной)?
Заранее большое спасибо за помощь.

Re: Как осуществить хранение информации об объектах (С++)?

Добавлено: 25 ноя 2010, 16:48
Decoder
Используй сериализацию, которая реализована в MFC. Она проста в использовании.
Ещё можно в XML записывать данные и потом читать оттуда.

Re: Как осуществить хранение информации об объектах (С++)?

Добавлено: 25 ноя 2010, 17:19
Dragon
С MFC не работал. У меня консольное приложение, которое скорее всего обрастет гуи в Qt. В последнем есть варианты сериализации, но они вроде для объектов самого кьюта.
Хорошо, тогда в чем суть сериализации чтобы написать ее с нуля, для той же записи в xml?
Просто в том же C# есть родные методы сериализации, причем хоть в бинарный файл, хоть в xml. В С++ этого нету. А задач чисто на С++.

Re: Как осуществить хранение информации об объектах (С++)?

Добавлено: 26 ноя 2010, 01:16
Savostin

Re: Как осуществить хранение информации об объектах (С++)?

Добавлено: 26 ноя 2010, 15:32
Decoder
Сериализация в MFC очень напоминает вывод данных на консоль с помощью потока cout или чтение с консоли через cin.
Там тоже используются перегруженные операторы << для записи в поток и >> для чтения из потока.
А для XML и в С++ полно разных библиотек. Например MSXML.
Совсем недавно эта тема здесь уже обсуждалась...
http://forum.developing.ru/showthread.php?22280-XML