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


Автор: georain 3.1.2008, 05:29
Есть набор классов, их надо сериализовать для записи на диск, а также сериализовать для отправки по сети, причём используются разные поля.
Хотелось бы использовать boost::serialization, но я что-то не соображу как там это можно сделать.

Автор: archimed7592 3.1.2008, 10:47
Боюсь, что никак. Сериализация(как технология) подразумевает единое представление одного и того же объекта.
Можно воспользоваться proxy-классом, чтобы организовать выбор метода сериализации, но это решение не универсально...

Автор: JackYF 3.1.2008, 10:49
Цитата(archimed7592 @  3.1.2008,  10:47 Найти цитируемый пост)
Можно воспользоваться proxy-классом

 smile или унаследовать два класса от этого, без добавления методов и функций - в одном одну сериализацию определить, в другом другую.

Автор: Любитель 3.1.2008, 18:51
Какая-то всё-таки странная ситуация... Если ты можешь сериализовать поля a, b или c, d => они взаимозаменяемы... Можешь конкретно показать класс (декларейшн) и объяснить, что ты хочешь получить при сериализации?

Автор: Alek86 3.1.2008, 19:21
кидать по сети нужно далеко не то, что сохранять на диск
к примеру

Автор: Любитель 3.1.2008, 19:24
Цитата(Alek86 @  3.1.2008,  19:21 Найти цитируемый пост)
кидать по сети нужно далеко не то, что сохранять на диск

Всмысле? Почему? Не ту информацию или не в том виде? За последнее - согласен, а вот первое спорно... Если это не "односторонняя сериализация" (просто импорт).

Автор: archimed7592 3.1.2008, 20:55
Цитата(Alek86 @  3.1.2008,  19:21 Найти цитируемый пост)
кидать по сети нужно далеко не то, что сохранять на диск

Значит паттерн "сериализация" здесь не подходит и не нужно изобретать себе сложности.
Если мне нужно сохранить на диск два числа, а по сети послать их сумму, то я так и сделаю smile.

Автор: Alek86 3.1.2008, 21:04
ну к примеру, если это обычный сервер с защитой, то некоторые данные (как пароль) просто недопустимо по сети высылать. думаю, "в жизни" подо
бные случаи могут быть

кстати, это уж особо к теме и не относится )

Автор: archimed7592 3.1.2008, 21:12
Цитата(Alek86 @  3.1.2008,  21:04 Найти цитируемый пост)
ну к примеру, если это обычный сервер с защитой, то некоторые данные (как пароль) просто недопустимо по сети высылать.

Пароли нигде не хранят вообще-то, но, даже если допустить реалистичность ситуации, то замечание о неприменимости сабжевого паттерна остаётся в силе ;).

Автор: georain 4.1.2008, 16:32
Есть клиент-серверное приложение, и там и там есть одинаковое дерево классов, но у серверных классов есть дополнительные поля, которые клиенту отправлять не нужно, необходимые для внутренней работы сервера. При выключении сервера все объекты классов записываются на диск полностью, а при работе с клиентом синхронизуется только часть полей.

Автор: Lazin 4.1.2008, 16:43
а вот так не вариант сделать?
Код

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
    ar & cliend_data;
    if (gServer)
        ar & server_data;
}

можно например сериализовать в xml, а его уже слать по сети или сохранять

Автор: Любитель 4.1.2008, 17:05
И всё-таки - можно один конкретный пример? И такой вопрос - при работе с клиентом ты только отправляешь данные? Не получашешь, что ли те же объекты (тех же классов)? И, если получаешь - откуда у тебя берутся "дополнительные" поля?

Решения возможны различные - желательно всё же описать ситуацию подробней smile

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