我使用 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上序列化地图时,我无法在Ubuntu上反序列化它。如果我尝试,会出现无效签名异常。