c++ - 如何将二进制文件反序列化为对象?

标签 c++ boost

我使用这种方法来序列化我的对象:

void save(Obj& obj) {
    ofstream os("obj.dat", ofstream::binary);
    boost::archive::binary_oarchive ar(os, boost::archive::no_header);
    ar << boost::serialization::make_binary_object(&obj, sizeof(obj));
}

我的Obj load(string fileName)的代码是什么?

最佳答案

基本上与您拥有的相同:

Obj load(std::string const& filename) {
    std::ifstream is(filename, std::ios::binary);
    boost::archive::binary_iarchive ar(is, boost::archive::no_header);
    Obj obj;
    ar >> boost::serialization::make_binary_object(&obj, sizeof(obj));
    return obj;
}

当然,这是,假设您的类型可与make_binary_object一起使用:确保Obj可按位序列化(POD):
    static_assert(std::is_pod<Obj>::value, "Obj is not POD");

另外,重新考虑using namespace:Why is "using namespace std;" considered bad practice?

关于c++ - 如何将二进制文件反序列化为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61772931/

相关文章:

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 将 std::sort 替换为 boost::sort

ios - 在 iOS 中使用共享内存

c++ - boost 序列化 - 对不同命名空间中的单一数据类型提供加载和保存方法

c++ - OpenGL GLFW : undefined reference to 'glfwInit'

c++ - opengl 4 中的逐顶点光照问题

c++ - 如何让 BOOST_TEST_MESSAGE 显示在屏幕上?

c++ - 是否存在 Boost 测试套件?

c++ - 一个变量声明创建多个实例

c++ - 将 std::uninitialized_fill() 与任何分配器一起使用是否有意义?