簡體   English   中英

如何使用 boost 更好地序列化?

[英]How do I serialize better using boost?

我正在使用 boost C++ 庫將數據序列化為二進制和文本文件。 但是在序列化數據時,它添加了我不想要的標題。 有沒有辦法刪除這些標題? 例如 :

#include <boost/archive/text_oarchive.hpp>
#include <fstream>

class Frame{
public:
    int x;
    int y;
    int z;
};
template <typename Archive>
void serialize(Archive& ar, Frame& f, const unsigned int version) {
    ar& f.x;
    ar& f.y;
    ar& f.z;
}

uint32_t main () {
    Frame f={1,2,3};
    std::ofstream ofs;
    ofs.open("TextFile.txt",std::ios::out);
    boost::archive::text_oarchive write(ofs,boost::archive::no_header);
    write << f;
    ofs.close();
}

它的結果將是:

00 1 2 3

但我想要的是:

1 2 3

即使在創建 text_oarchive 對象時使用 no_header 后,它仍然給出這個“00”,我想擺脫它。 那么,如何去除這個呢?

像其他人一樣,我認為您不應該將 Boost Archives 與流混淆。 只是...自己編寫代碼。

但是,如果這有幫助, https://www.boost.org/doc/libs/release/libs/serialization/doc/traits.html展示了如何抑制版本信息:

科利魯

#include <boost/archive/text_oarchive.hpp>
#include <iostream>
using boost::archive::archive_flags;

struct Frame {
    int  x, y, z;
    void serialize(auto& ar, unsigned) { ar& x& y& z; }
};

BOOST_CLASS_IMPLEMENTATION(Frame, boost::serialization::level_type::object_serializable)

int main()
{
    boost::archive::text_oarchive oa(std::cout, archive_flags::no_header);
    oa << Frame {1, 2, 3};
}

印刷

1 2 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM