派生类行程的序列化Boost断言
Serialization of derived class trips Boost assertion
当尝试用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
,但这也不起作用。知道我哪里做错了吗?
您可能并不打算使用多态xml_archive(参见文档)。
值得注意的是,多态归档必须与归档的接口有关,与您要序列化的实体无关(它们总是可以是多态的)。
如果使用xml_archive
,问题就消失了。
相关文章:
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- C++boost序列化多态性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用 Boost 序列化mersenne_twister_engine?
- boost::序列化中的派生类偏移量计算.有效吗?
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 序列化模式类似于boost::序列化
- 序列化和反序列化boost共享指针
- 使用 Boost::Serialization 序列化具有 std::mt19937_64 成员的类
- boost::container::vector 无法用谷物序列化?
- 使用 Boost 对具有 const 成员的类进行序列化
- 使用 boost::序列化代码将 *this 传递给模板函数会产生错误
- C++ 从 Boost object_pool构造的指针的 Boost 二进制序列化
- 如何使用谷物序列化 boost::p tr_vector
- 如何用谷物序列化 boost::uuid
- 派生类行程的序列化Boost断言
- 如何使用Boost序列化来序列化Boost scoped_array
- 如何序列化 <boost::shared_ptr<void *>> 类型的列表变量
- 我如何重载序列化boost函数,使其一个用于文件存储,另一个用于tcp消息