簡體   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