2

次のコードをバージョン 1.49.0 のブースト シリアライゼーション ライブラリで実行すると、バージョン番号が失われます。

#include <boost/serialization/nvp.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <iostream>

using namespace std;
using namespace boost::archive;

class Nested {
public:
    explicit Nested()
    : mC()
    { }

    explicit Nested(char c)
    : mC(c)
    { }

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

    template<class Archive>
    void serialize(Archive& ar, const unsigned int)
    {
        using boost::serialization::make_nvp;
        ar & make_nvp("c", mC);
    };

private:
    char mC;
};

BOOST_CLASS_VERSION(Nested, 0);

int main()
{
    Nested n('c');

    {
        using boost::serialization::make_nvp;
        xml_oarchive ar(cout);
        ar << make_nvp("Nested", n);
    }

    return 0;
}

バージョン 1.49.0 での出力:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="9">
<Nested class_id="0" tracking_level="0" version="2057815296">
        <c>99</c>
</Nested>
</boost_serialization>

古いバージョンで実行すると、期待どおり 0 バージョンが取得されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="6">
<Nested class_id="0" tracking_level="0" version="0">
        <c>99</c>
</Nested>
</boost_serialization>

バージョン間で変更されたものを見逃していますか? 他の誰かがこれを経験しましたか?

4

0 に答える 0