Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация 
V
    Опции темы
Xenon
Дата 9.12.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Нигде не могу найти нормальной  документации, как это реализовать на С++.
В поиске посылают либо в MFC, либо в boost smile В инете нашел только голые примеры без туторилов и объяснений как и что. То есть самого принципа сериализации/десериализаци не описывается.
Может кто видел статью подобную? smile


--------------------
user posted image  
PM MAIL   Вверх
Daevaorn
Дата 9.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Xenon @  9.12.2006,  22:14 Найти цитируемый пост)
То есть самого принципа сериализации/десериализаци не описывается.

Принципы зависят от реализации.
http://en.wikipedia.org/wiki/Serialization
PM MAIL WWW   Вверх
SaDFromSpb
Дата 9.12.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 3



Xenon, Так ее суть в том, чтобы все члены данные засунуть в непрерывный кусок памяти по порядочку, а потом их достать от туда (если речь идет о сериализации в память или в двоичный файл). Что тут, собственно, такого? Зачем что-то искать? Даже на Java, на сколько я знаю, нет встроенного решения. Это всегда вручную делается. (Хотя я могу ошибаться)

Это сообщение отредактировал(а) SaDFromSpb - 9.12.2006, 21:26


--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
Xenon
Дата 9.12.2006, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



SaDFromSpb, ну в MFC есть Archive, в С++ можно подклчить Boost - это уже, так сказать, костыли помощи smile

Daevaorn, у меня просто имеется вектор указателей на объекты классов, в которых есть поля типа string. Мне нужно каким-то образом это в бинаромном виде сохранить, а потом иметь возможность восстановить(прочитать).


--------------------
user posted image  
PM MAIL   Вверх
Daevaorn
Дата 9.12.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Xenon @  9.12.2006,  23:09 Найти цитируемый пост)
у меня просто имеется вектор указателей на объекты классов, в которых есть поля типа string. Мне нужно каким-то образом это в бинаромном виде сохранить, а потом иметь возможность восстановить(прочитать). 

boost::serialization - самый быстрый(в интеграции) и простой способ
PM MAIL WWW   Вверх
Xenon
Дата 9.12.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Daevaorn, а если самому? smile Просто чтобы понять концепцию, я так понимаю, нужно самому написать smile
А нет по boost`у хелпа на русском?


--------------------
user posted image  
PM MAIL   Вверх
WERITAS
Дата 9.12.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Цитата
я так понимаю, нужно самому написать 

Функцию Serialiaze ты сам будешь писать


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Сериализация - тема очень интересная, хорошей общей обзорной статьи не встречал. По-моему, эту часть языка ооочень неплохо было бы стандартизировать. Ай! Ногами не пинать, сам могу примеров пачку придумать, для которых стандарт фиг придумаешь.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Любитель
Дата 11.12.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Xenon, юзай буст - не ошибёшься. Возможностей в буст::сериализейшен куча, даже если сейчас все не будешь использовать - потом оценишь. Плюс великолепный дизайн и удобство использования. Там достаточно понятные туториалы (хоть и на инглише).


--------------------
PM MAIL ICQ Skype   Вверх
Xenon
Дата 11.12.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Любитель, просто мне казалось, что это будет забиванием гвоздей микроскопом smile
А по бусту есть русский мануал?


--------------------
user posted image  
PM MAIL   Вверх
nickless
Дата 11.12.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Xenon @ 9.12.2006,  21:09)
у меня просто имеется вектор указателей на объекты классов, в которых есть поля типа string. Мне нужно каким-то образом это в бинаромном виде сохранить, а потом иметь возможность восстановить(прочитать).

В принципе если хочешь сделать сам, то это не так уж сложно.
Если ты знаешь (можно константу какую-нибудь в начале записать) какие классы у тебя в векторе и какие в них данные, то:
запись
- пишешь размер вектора = х
- for (int i=0; i<x; i++) {
    - пишешь по очереди все статические данные
    - пишешь длину строки
    - пишешь саму строку
}
чтение
- читаешь размер вектора, создаёшь его
- for (int i=0; i<x; i++) {
    - читаешь по очереди все статические данные
    - читаешь длину строки, удлиняешь строку в классе до нужного размера
    - читаешь саму строку
}



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Xenon
Дата 11.12.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



nickless, у меня даже статики нет, только string поля.
Вот, чтобы проще было (код класса, адресса на объекты которого хранятся в деке:
Код

class Calbum
{
    friend class Cmanager;
private:
    int year;
    string genre,artist,title;
    Calbum(){}
    Calbum(int _year, string _genre, string _artist, string _title):year(_year),genre(_genre),artist(_artist),title(_title){}
    ~Calbum(){}
};

А двунаправленный список объявлен так в классе Cmanager:
Код

std::deque<Calbum*> album_list;



--------------------
user posted image  
PM MAIL   Вверх
nickless
Дата 11.12.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Ну вот и добавь туда что-то вроде save_to_file(std::ofstream&) и Calbum(const std::ifstream&), которые пишут/читают year, потом длину genre, сам genre, длину artist, сам artist ...
Потом останется только записать кол-во элементов в deque и пройтись по нему итератором


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Xenon
Дата 11.12.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



nickless, я только думаю ... Эти все данные представить в виде структуры, или просто подряд писать и все? И как лучше: записать размеры всех переменных, потом само содержимое, либо по-очередно размер/содержимое?


--------------------
user posted image  
PM MAIL   Вверх
JackYF
Дата 11.12.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Xenon, мое мнение - поочередно размер/содержимое. Получится скромненькая структурка.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.