[英]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.