簡體   English   中英

如何提升::序列化std / boost :: optional?

[英]How to boost::serialize an std/boost::optional?

如何序列boost::serialization包含boost::optional的類(使用boost::serialization )?

即,以下代碼在實例化時將給出錯誤。

錯誤C2039:'serialize':不是'boost :: optional'的成員C:\\ boost \\ boost_1_55_0 \\ boost \\ serialization \\ access.hpp 118

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

class MyClass {
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & my_member;
    }

    boost::optional<int> my_member;
};

int main() {
    std::ofstream ofs("filename.txt");
    const MyClass g;
    boost::archive::text_oarchive oa(ofs);
    oa << g;
    return 0;
}

我知道可能存在一個更深層次的問題(當值不存在時,你應該寫什么文件?),但必須有一些標准的解決方案。 我正在尋找解決這個問題的最簡單方法。

對於boost::optional您只需要添加#include <boost/serialization/optional.hpp>

它實現了一個非成員序列化函數,允許您序列化boost::optional而不必擔心細節。

它首先保存/加載t.is_initialized()的布爾值,並根據其值決定是否保存/加載其余值。

您可以在此處查看源代碼: http//www.boost.org/doc/libs/1_56_0/boost/serialization/optional.hpp

暫無
暫無

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

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