我使用Boost.Serialization序列化std::map。代码看起来像这样

void Dictionary::serialize(std::string & buffer)
{
  try {
    std::stringstream ss;
    boost::archive::binary_oarchive archive(ss);
    archive << dict_;
    buffer = ss.str();
  } catch (const std::exception & ex) {
    throw DictionaryException(ex.what());
  }
}

void Dictionary::deserialize(const char * const data, int length)
{
  try {
    namespace io = boost::iostreams;
    io::array_source source(data, length);
    io::stream<io::array_source> in(source);
    boost::archive::binary_iarchive archive(in);
    archive >> dict_;
  } catch (const std::exception & ex) {
    throw DictionaryException(ex.what());
  }
}

我在Mac Snow Leopard和Ubuntu Lucid 10.04上编译并测试了代码。两个系统上都有Boost 1.40。在Mac上,我自己创建了代码。在Ubuntu盒子上,我通过aptitude获得了二进制文件。

问题:当我在Mac上序列化 map 时,无法在Ubuntu盒子上反序列化它。如果尝试,我会收到一个无效签名异​​常。

最佳答案

尝试使用text_iarchivetext_oarchive代替二进制文件。从documentation

关于c++ - Boost.Serialization在不同平台上的序列化是否不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3708842/

10-12 02:23