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

Вопросы сериализации - C++

Восстановить пароль Регистрация
 
 
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
12.11.2012, 20:32     Вопросы сериализации #1
 Комментарий модератора 
Ноги здесь: Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию


Цитата Сообщение от silent_1991 Посмотреть сообщение
НеСказочник, если вы возьмёте свой код и замените в нём слово class на struct, то увидите, что свойство сохраняется. Сложные данные, требующие собственной логики копирования, никогда правильно скопированы не будут, ни в структуре, ни в классе.
Кстати, по этой теме. А если мне надо загнать довольно сложный класс в массив байт, что бы потом его сохранить в файл. Есть ли какие-то стандартные инструменты кроме класса для работы с JSON. JSON просто текстом сохраняет, а там может быть много разных данных, некрасиво получится.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 20:32     Вопросы сериализации
Посмотрите здесь:

C++ Вопросы
C++ Вопросы
Житейские вопросы по С++ C++
C++ Вопросы по C++
Вопросы по С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
12.11.2012, 21:28  [ТС]     Вопросы сериализации #21
Кстати, я щас вспомнил, что в стареньком Turbo pascal была таки стандартная сериализация. По крайней мере экземпляры сложных структур я там сохранял в файл буквально парой движений. Интересно, почему в C такого не предусмотрели? Потоки ведь есть. Не ужели настолько хотели облегчить, что даже это посчитали лишним?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.11.2012, 21:36     Вопросы сериализации #22
НеСказочник, не уж то и объекты, выделенные динамически, сохранялись?
Вообще объекты, типы которых не используют виртуальность (в наследовании и в полиморфизме), которые не содержат выделенных динамически данных (или статических данных, содержащих динамические данные), в общем, объекты, которые полностью (рекурсивно, если можно так выразиться) лежат в автоматической памяти, можно перевести в поток байтов так:

C++
1
char *simple_object_bytes = reinterpret_cast<char *>(&simple_object);
Размер такого байтового массива будет sizeof(simple_object). Восстановить такой объект можно через memcpy, например.

Добавлено через 2 минуты
Но это тоже компиляторозависимо. Кто его знает, как там компилятор перетасует поля объектов. В общем, лучше всего использовать универсальные алгоритмы сериализации. Для передачи по сети, например, лучше перегонять в поток байтов. А для сохранения состояния объекта на диск можно ограничиться и переводом в XML.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 21:39     Вопросы сериализации
Еще ссылки по теме:

C++ Вопросы по C++
Вопросы по C++ C++
C++ Метод сериализации

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
12.11.2012, 21:39  [ТС]     Вопросы сериализации #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
НеСказочник, не уж то и объекты, выделенные динамически, сохранялись?
Вообще объекты, типы которых не используют виртуальность (в наследовании и в полиморфизме), которые не содержат выделенных динамически данных (или статических данных, содержащих динамические данные), в общем, объекты, которые полностью (рекурсивно, если можно так выразиться) лежат в автоматической памяти, можно перевести в поток байтов так:

C++
1
char *simple_object_bytes = reinterpret_cast<char *>(&simple_object);
Размер такого байтового массива будет sizeof(simple_object). Восстановить такой объект можно через memcpy, например.
Там можно было создать/открыть файл тремя способами:
- текстовый. Сохраняется текст. Ничего нового.
- бинарный. Опять ничего нового. Массив байт.
- Типовой. При создании объекта, обеспечивающего сохранение файла ему нужно передать тип. Что передадите с тем и работает.


Нам ещё тогда в универе (тогда я ещё учился) на вопросы "Как читать файл?" препод отвечал "А как писали, так и читайте."
Yandex
Объявления
12.11.2012, 21:39     Вопросы сериализации
Ответ Создать тему
Опции темы

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