【问题标题】:boost::serialization - is there a portable way to binary-serialize std::wstrings?boost::serialization - 是否有一种可移植的方法来二进制序列化 std::wstrings?
【发布时间】:2011-12-14 10:44:26
【问题描述】:

我想用 boost::serialization 在同一台 Windows 机器上序列化 32 位进程和 64 位进程之间的一些数据结构。

This answer 建议使用 eos::portable_iarchive,但是当我尝试这样做时,我遇到了 STATIC_ASSERT 失败:

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

是否有不同的方法来执行此操作(除了 text_iarchive 我不想用于性能考虑)也支持 std::wstrings?

【问题讨论】:

  • 最好是 1.47 / 最新版本,但我会接受任何我能得到的建议。

标签: c++ boost portability boost-serialization


【解决方案1】:

根据我的阅读,序列化宽字符串的标准方法是首先将它们编码为 UTF-8 窄字符串。不过,这可能比您想要的开销更大。

在 Boost.Serialization 示例目录中有一个可移植二进制存档的替代实现。 Boost.Serialization documentation 听起来它最大的缺点是缺乏便携式浮点支持和缺乏严格的测试,所以如果您不需要便携式浮点,它可能会满足您的需求。

我不知道你是否看过其他的序列化库,但有几个选择,包括libs11nProtocol Buffers。 (就个人而言,我同时使用了 Boost.Serialization 和 Protocol Buffers,我更喜欢 Protocol Buffers。)

【讨论】:

  • 奇怪我错过了 boost 示例文件夹中的便携式二进制存档。在 windows 下的混合 32/64 位环境中使用时,它似乎工作正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 2012-11-23
  • 2011-05-15
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多