对于不同的编译器,boost binary_oarchive的工作方式不同

时间:2016-06-13 07:54:00

标签: c++ c++11 boost

我需要在客户端和服务器之间传输数据。当我将服务器从Windows(msvc140)移动到Debian(gcc 64位)时,我的基于boost的字节流类出现了问题。他们的档案不同。

#include <string>    
#include <boost/archive/binary_oarchive.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/stream.hpp>

int main()
{
    std::string s;
    typedef boost::iostreams::back_insert_device<std::string> BackInsertDevice;
    typedef boost::iostreams::stream<BackInsertDevice> Stream;
    typedef boost::archive::binary_oarchive BinaryOArchive;

    Stream stream(s);
    BinaryOArchive ar(stream);

    ar << "qwer" << 10;
    stream.flush();

    int sz = s.size();
    // Windows (msvc140):    49
    // Debian  (gcc 64-bit): 57 
}

boost的两个版本均为1.61.0

1 个答案:

答案 0 :(得分:2)

记录在案。 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/todo.html#portablebinaryarchives

Boost本身没有便携式存档。

您想查看EOS Portable Archives:https://epa.codeplex.com/

他们很容易放弃您的代码库并使用而不是boost::archive::binary_[io]archive