Форум программистов, компьютерный форум CyberForum.ru

Сериализация - C++

Восстановить пароль Регистрация
 
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
08.04.2012, 23:57     Сериализация #1
Что-то я не совсем понял сериализацию.

Использовать код наподобие

C++
1
2
3
4
MyClass m;
 
std::ofstream f ("dump.bin", std::binary);
f.write (&m, sizeof (m));
можно только в том случае, если MyClass является POD-типом? Если да, то почему?

Да и вообще, судя по всему, любые типы, включая фундаментальные, надо сериализовать перед сохранением, т.к. на другой платформе может быть другой порядок байт, разве нет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 23:57     Сериализация
Посмотрите здесь:

Сериализация C++
Сериализация данных C++
C++ сериализация
Сериализация C++
C++ Потоки, сериализация
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.04.2012, 00:12     Сериализация #2
Цитата Сообщение от YourLastSong Посмотреть сообщение
можно только в том случае, если MyClass является POD-типом? Если да, то почему?
для конструирования non-POD типа нужен вызов конструктора
я честно не уверен какие последствия могут, и есть ли они
более важно, чтобы эти типы не соддержали указателей/ссылок на внешние объекты, иначе при сериализации нужно будет сериализировать и их состояние


Цитата Сообщение от YourLastSong Посмотреть сообщение
Да и вообще, судя по всему, любые типы, включая фундаментальные, надо сериализовать перед сохранением, т.к. на другой платформе может быть другой порядок байт, разве нет?
это принципиально только если сохраненный тип будет восстанавливаться на другой машине
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
09.04.2012, 00:53  [ТС]     Сериализация #3
более важно, чтобы эти типы не соддержали указателей/ссылок на внешние объекты
Что Вы подразумеваете под внешними объектами? Любые объекты, которые не являются членами данного класса?

это принципиально только если сохраненный тип будет восстанавливаться на другой машине
Ну да, я как раз про это и говорил. Тогда получается, что для действительно платформо-независимого кода необходимо сериализовывать даже переменные фундаментальных типов?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.04.2012, 01:07     Сериализация #4
Цитата Сообщение от YourLastSong Посмотреть сообщение
Что Вы подразумеваете под внешними объектами? Любые объекты, которые не являются членами данного класса?
да, при восстановлении объекта у него окажутся ссылки (адреса) на объекты которых не существует
Цитата Сообщение от YourLastSong Посмотреть сообщение
Тогда получается, что для действительно платформо-независимого кода необходимо сериализовывать даже переменные фундаментальных типов?
по сути да, там little-big-endian итп
я никогда сильно с этим связан не был, но думаю есть смысл почитать про boost::serialization
Yandex
Объявления
09.04.2012, 01:07     Сериализация
Ответ Создать тему
Опции темы

Текущее время: 02:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru