[英]How to save a std::vector of C++ objects in binary format to disk?
我有潜在异构对象的基类指针的矢量(所有对象均源自同一基类)。 我想将此向量以二进制格式保存到磁盘。 C ++中是否有一个库以二进制格式存储对象和stl容器?
C ++中是否有一个库以二进制格式存储对象和stl容器?
是的, Boost序列化正是这样做的。 目标之一是:
我不会尝试重新发明这个轮子-在这个领域中,您已经解决了很多死角案例和棘手的问题。
我建议使用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.