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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 343
Записей в блоге: 2
#1

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

12.11.2012, 20:32. Просмотров 879. Ответов 22
Метки нет (Все метки)

 Комментарий модератора 
Ноги здесь: Везде говорится, что структуры и классы отличаются только типом доступа к членам по умолчанию


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

Метод сериализации - C++
Помогите найти пинфу по Методу сериализации

Поясните по сериализации - C++
В boost::serialization Нужно слить мап в файл. Простите за тупой вопрос, но нужно прописывать сериализацию для каждого класса...

Ищу литературу по интерфейсам, делегатам, сериализации и т.п. применительно к C++ - C++
Добрый вечер. Подскажите, есть ли какая литература по интерфейсам, делегатам, сериализации и т.д., как и когда их применять на практике, но...

Вопросы по C++ - C++
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как...

Вопросы по C++ - C++
Пожалуй начну) Можно ли в С++, обьявить определенному элементу массива определенное значение, как можно в пхп? Приведу пример: php:...

Вопросы по C++ - C++
Хочу учиться писать программы на C++, и у меня несколько вопросов 1) Этот язык такой же сложный, как Ассемблер? Например, Паскаль мне...

Вопросы по С++ - C++
1) Чем отличается const *char от сhar при использовании в программах? 2) Тип void * так и не понял как и что с ним делать. Видел в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 343
Записей в блоге: 2
12.11.2012, 21:28  [ТС]     Вопросы сериализации #21
Кстати, я щас вспомнил, что в стареньком Turbo pascal была таки стандартная сериализация. По крайней мере экземпляры сложных структур я там сохранял в файл буквально парой движений. Интересно, почему в C такого не предусмотрели? Потоки ведь есть. Не ужели настолько хотели облегчить, что даже это посчитали лишним?
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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++
Здравствуйте! 1. Как сделать так, чтобы программа (функция (strlen() ) не считала пробелы? 2. Можно ли упростить (сократить)...

Вопросы - C++
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а...

программирование вопросы - C++
Программирование С и С++ Здравствуйте товарищи программисты, очень нужна ваша помощь так как завтра экзамен.... а я решила первых три...

Вопросы по теории C++ - C++
Есть несколько вопросов по теории C++ 1)Что такое функция пользователя 2)Как инициализировать указатель Если можно , то без всяких...

Ответы на вопросы - C++
Помогите ответить на данные вопросы. В гугле искать ничего нет смысла так как не понимаю о чем речь. Пожалуйста, напишите , что знаете. ...


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

Или воспользуйтесь поиском по форуму:
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 343
Записей в блоге: 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     Вопросы сериализации
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru