繁体   English   中英

如何将二进制格式的C ++对象的std :: vector保存到磁盘?

[英]How to save a std::vector of C++ objects in binary format to disk?

我有潜在异构对象的基类指针的矢量(所有对象均源自同一基类)。 我想将此向量以二进制格式保存到磁盘。 C ++中是否有一个库以二进制格式存储对象和stl容器?

C ++中是否有一个库以二进制格式存储对象和stl容器?

是的, Boost序列化正是这样做的。 目标之一是:

  • STL容器和其他常用模板的序列化。

我不会尝试重新发明这个轮子-在这个领域中,您已经解决了很多死角案例和棘手的问题。

我建议使用Google的protobuf库,该库仅用于解决此问题。 它是二进制的,因此根本不可读。 https://developers.google.com/protocol-buffers/

考虑一下:

class Base {
protected:
    unsigned int id_;
protected:
    Base() {}
    virtual ~Base(){}
};

class DerivedA : public Base {
public:
    int someIntA_;
    short someShortA_;
};

class DerivedB : public Base {
public:
    int someIntB_;
    double someDoubleB_;
};

void writeToFile( const std::string& filename, std::vector<Base*>& objs ) {
    // first few elements in objs
    objs[0] = DerivedA;
    objs[1] = DerivedB;
    objs[2] = DerivedB;
    objs[3] = DerivedA;

    // how to pack & extract data in binary?
}

您的向量包含指向Base指针,该指针取决于系统和架构师,将确定sizeof()指针类型。 大多数系统的指针类型有4个字节,但是不能保证。 但是,这些指针指向的数据类型是其派生类型。 在内存中sizeof(DerivedA)将不同于sizeof(DerivedB) 您必须告知C++ Compiler如何在写入文件和读取文件(从文件中提取)时解析这些数据,并且其中不包括任何可能使用的压缩技术。

现在,对于将为您序列化数据的所有自动生成库; 我对任何事情都不了解,但是我已经看到其他人给了您一些可能值得研究的建议,否则您将自己根据数据类型来回写入文件及其结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM