Задача следующая. Есть некий класс со следующими полями:
string name
string type
int num
У этого класса есть наследник, получающий 2 опциональных поля:
string optional_name
int optional_num
Эти объекты группируются по категориям (Категория 1, Категория 2 и т.д.). В каждой категории может быть неограниченное кол-во объектов обоих типов. Всего пока насчитывается порядка 200-300 объектов, будет ли увеличение неизвестно.
Суть программы - просмотр содержимого объектов (одного объекта, принадлежащих определенной категории, всех объектов). Возможность добавлять новые объекты в разные категории. Удалять существующие.
Вопрос же в следующем: как хранить уже существующую информацию?
Думал в базе данных, но объектов не так уж и много. Есть вариант хранения в файле, правда не понятно как их оттуда вытаскивать в соответствии с задачами (как вариант 1 объект - 1 строка, и вытаскивать распарсивая строки).
Вобщем, обмозговывая данную ситуацию пришел к следующему - к (де)сериализации. Но, насколько мне известно, в С++ этого нету. Есть вроде бы в библиотеку boost, но я с бустом не работал, да и пишут в интернетах, что не очень эффективно по скорости (скорость немного важна). Нашел еще решение, предложенное гугглом - google protobuf, но он мне не понравился следующими вещами:
- нету поддержки наследования
- нужно предварительно формировать .proto файл, потом его компилить и на его основе создастя необходимый мне класс
Есть ли какие-нибудь оптимальные методы (де)сериализации или хранения информации об объектах между работой программы, где по их реализацию почитать можно (может кто-то поделиться своей или общепризнанной)?
Заранее большое спасибо за помощь.
Как осуществить хранение информации об объектах (С++)?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Используй сериализацию, которая реализована в MFC. Она проста в использовании.
Ещё можно в XML записывать данные и потом читать оттуда.
Ещё можно в XML записывать данные и потом читать оттуда.
Поумнеть несложно, куда труднее от дури избавиться.
С MFC не работал. У меня консольное приложение, которое скорее всего обрастет гуи в Qt. В последнем есть варианты сериализации, но они вроде для объектов самого кьюта.
Хорошо, тогда в чем суть сериализации чтобы написать ее с нуля, для той же записи в xml?
Просто в том же C# есть родные методы сериализации, причем хоть в бинарный файл, хоть в xml. В С++ этого нету. А задач чисто на С++.
Хорошо, тогда в чем суть сериализации чтобы написать ее с нуля, для той же записи в xml?
Просто в том же C# есть родные методы сериализации, причем хоть в бинарный файл, хоть в xml. В С++ этого нету. А задач чисто на С++.
Сериализация в MFC очень напоминает вывод данных на консоль с помощью потока cout или чтение с консоли через cin.
Там тоже используются перегруженные операторы << для записи в поток и >> для чтения из потока.
А для XML и в С++ полно разных библиотек. Например MSXML.
Совсем недавно эта тема здесь уже обсуждалась...
http://forum.developing.ru/showthread.php?22280-XML
Там тоже используются перегруженные операторы << для записи в поток и >> для чтения из потока.
А для XML и в С++ полно разных библиотек. Например MSXML.
Совсем недавно эта тема здесь уже обсуждалась...
http://forum.developing.ru/showthread.php?22280-XML
Поумнеть несложно, куда труднее от дури избавиться.