gpt4 book ai didi

c++ - 派生类 trips 的序列化 Boost 断言

转载 作者:太空狗 更新时间:2023-10-29 21:45:39 25 4
gpt4 key购买 nike

当尝试使用 boost::serialization 序列化派生类时,boost/archive/detail/oserializer.hpp 中的断言(Boost 1.53.0 中的第 436 行) 被绊倒:

const basic_pointer_oserializer * bpos
= static_cast<const basic_pointer_oserializer *>(
boost::serialization::singleton<
archive_serializer_map<Archive>
>::get_const_instance().find(*true_type)
);
BOOST_ASSERT(NULL != bpos);

这是我的 MWE:

#include <iostream>
#include <fstream>

#include <boost/archive/polymorphic_xml_oarchive.hpp>

#include <boost/serialization/nvp.hpp>
#include <boost/serialization/access.hpp>
#include <boost/serialization/base_object.hpp>

class base
{
friend class boost::serialization::access;

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

int test;

public:
virtual void print() { std::cout << 1 << std::endl; }
};

class derived : public base
{
friend class boost::serialization::access;

template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & boost::serialization::make_nvp("base", boost::serialization::base_object<base>(*this));
ar & boost::serialization::make_nvp("test2", test2);
}

int test2;

public:
void print() { std::cout << 2 << std::endl; }
};

int main (int argc, char const *argv[])
{
base *b = new derived();

std::ofstream stream("out.xml");
boost::archive::polymorphic_xml_oarchive ar(stream);
ar.register_type<derived>();
ar << boost::serialization::make_nvp("b", b);

return 0;
}

我也尝试使用 BOOST_CLASS_EXPORT_GUID 而不是 register_type,但这也没有用。知道我做错了什么吗?

最佳答案

您可能并不打算使用 polymorphic_xml_archive (see docs) .

值得注意的是,多态存档 与存档的界面有关,与您为其序列化的实体无关(它们始终可以是多态的)。

如果您改用 xml_archive,问题就会消失。

关于c++ - 派生类 trips 的序列化 Boost 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17128578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com