Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сериализация своими руками


Автор: JDL500 22.1.2007, 19:14
Доброе время суток!

У меня такой вопрос.
Как самому реализовать сериализацию?
На с++.
Знаю, что реализаций существует много (Boost, MFC ... ).
Хотелось бы самому разобраться как это работает и реализовать.

Например есть объект класса.
Надо память побайтно читать и в файл писать?
А потом также в память копировать?

Заранее спасибо.


Автор: Sartorius 22.1.2007, 19:16
 Если нет динамических полей - то да. Если есть - то соответственно выделять для них память при чтении и писать в кучу из файла.

Автор: Oleg_Ci 22.1.2007, 20:55
Месяц назад поучительная (для меня) тема была http://forum.vingrad.ru/topic-126270.html smile 

Автор: PoloS 22.1.2007, 21:21
нупский вопрос: а что такое сериализация?

Автор: nickless 22.1.2007, 21:43
Цитата(PoloS @ 22.1.2007,  20:21)
нупский вопрос: а что такое сериализация?

Процесс перевода какой-либо структуры данных (это может быть всё что угодно, в том числечто-нибудь разветвлённое) в массив байтов, который скажем можно записать в файл.

Автор: nerezus 22.1.2007, 21:56
MSDN: CFile и CArray ищи.

Добавлено @ 21:58 
Ааа, если сам, то просто создай метод serialize(), который принимает поток...
И создай статичный метод с именем unserialize(). Естественно, тоже поток принимает пкусть.

И всего делов то )

Автор: Vyacheslav 23.1.2007, 10:57
Делов то конечно немного smile ... когда проблему упростили до банального: записать объект в поток - восстановить  объект наперед известного класса из потока. Как правило же, в из потока надо восстанавливать объекты, информация  о классе которого записана в том же потоке. То есть определенно можно сказать, что нужно восстановить объект класса, который входит в заданный список классов. Информация о том, какой объект какого класса стоит в очереди на восстановление заранее неизвестна. Отсюда, необходимость наличия абстрактной фабрики или фабричного метода в системе сериализации, а также разработка приемлимого механизма для регистрации новых классов в системе сериализации для того, что бы при добавлении нового класса не приходилось каждый раз перерписывать код.
А так все конечно до банальности просто smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)