如何对二进制输出使用boost序列化?

Pra*_*til 3 c++ boost

函数 boost::serialization::binary_object(void * t, size_t size) 和 boost::serialization::make_binary_object(void * t, size_t size) 有什么区别?

我如何使用它们来获取实际的输出二进制文件?

Dam*_*ian 5

欢迎来到 SO!!

这是一个显示如何使用它的示例。

#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/binary_object.hpp>
#include <boost/serialization/serialization.hpp>
#include <iostream>
#include <sstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::stringstream stream;
    boost::archive::binary_oarchive ar(stream, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));

    std::cout << "Size: " << stream.str().size() << "\n";
}
Run Code Online (Sandbox Code Playgroud)

如果你想将二进制对象保存在一个文件中,这里有一个例子,将它保存在一个名为 data.dat 的文件中

#include <fstream>

using boost::serialization::make_binary_object;

enum class Example : uint8_t {
    A = 1,
    B = 2,
};

int main() {

    std::ofstream f("data.dat", std::ofstream::binary);
    boost::archive::binary_oarchive ar(f, boost::archive::no_header);

    auto data = Example::A;
    ar << make_binary_object(&data, sizeof(data));  
}
Run Code Online (Sandbox Code Playgroud)

运行代码后,文件看起来像这样
数据.dat文件

来自@StoryTeller 发布的boost 源代码注释
make_binary_object() 只是支持所有序列化包装器遵循命名约定 make_xxxxx 的约定的小帮手