Как загрузить сериализованный Boost :: вариант? - PullRequest
2 голосов
/ 20 июля 2011

Я не могу использовать boost::serialization, потому что он имеет библиотечные зависимости, поэтому я пытаюсь найти способ сделать это сам.Неважно, если это означает, что копирование из boost::serialization.

После прочтения этого ответа на аналогичный вопрос я посмотрел на boost / serialization / variable.hpp. и найденная save() функция, которая является прямой и понятной для меня.

Однако функция load() выглядит более сложной: существует рекурсия, включающая load() и variant_impl<types>::load(), и уменьшенная which параметр.Таким образом, очевидно, что код перебирает каждый тип варианта, чтобы преобразовать int which в тип.Остальное за мной.

Я знаю, что у boost есть много кода, чтобы сделать его переносимым, поэтому, возможно, есть менее переносимый, но более простой способ сделать это?

1 Ответ

1 голос
/ 20 июля 2011

Если вы удалили материал сериализации из копии файла boost / serialization / variable.hpp (кроме параметра шаблона Archive) - то есть получите свои собственные типы исключений и измените, например,

ar >> BOOST_SERIALIZATION_NVP(which);
// to:
ar >> which;

Тогда похоже, что вы должны иметь возможность заменить Archive на std :: ostream или std :: istream в функциях сохранения / загрузки соответственно.

Не пробовал, но на первый взгляд похоже, что он должен работать.

Я думаю, это зависит от того, что вы на самом деле используете для сериализации данных, если не используете boots :: serialization?

...