boost :: serialization - есть ли переносимый способ двоичной сериализации std :: wstrings? - PullRequest
3 голосов
/ 25 октября 2011

Я хочу сериализовать некоторые структуры данных между 32-битным и 64-битным процессами на одном компьютере с Windows с помощью boost :: serialization.

В этом ответе предлагается использовать eos :: portable_iarchive, но когда я попробовал это, я получил ошибку STATIC_ASSERT:

// implementation only valid for narrow string
BOOST_STATIC_ASSERT(sizeof(C) == sizeof(char));

Есть ли другой способ сделать это (кроме text_iarchive, который я не хочу использовать для соображений перфорации), который поддерживает std:wstrings также?

1 Ответ

1 голос
/ 25 октября 2011

Из того, что я прочитал, стандартный подход к сериализации строк широких символов заключается в том, чтобы сначала кодировать их в виде строк узких символов UTF-8.Однако это может потребовать больше ресурсов, чем вы хотите.

В каталоге примеров Boost.Serialization есть альтернативная реализация переносимого двоичного архива.Документация Boost.Serialization говорит о том, что ее основными недостатками являются отсутствие поддержки переносимых чисел с плавающей запятой и тщательное тестирование, поэтому, если вам не нужны переносимые поплавки, это может удовлетворить ваши потребности.

Не знаю, смотрели ли вы на другие библиотеки сериализации или нет, но есть несколько альтернатив, включая libs11n и Буферы протокола .(Лично я использовал Boost.Serialization и Protocol Buffers, но я предпочитаю Protocol Buffers.)

...