Boost序列化树结构
Boost Serialization Tree Structure
我正在尝试构建一个树形结构来容纳由一系列问题组成的测试。
这个想法是,Test, Question, QuestionPart都将从以下类派生:
class Node
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & boost::serialization::make_nvp("children", m_children);
ar & boost::serialization::make_nvp("intro", m_intro);
}
public:
Node(){};
virtual ~Node(){};
virtual void addChildNode( Node* _child );
virtual const std::string getIntro() const;
virtual Node* getChild( const _index ) const;
virtual void setIntro( std::string _intro );
protected:
std::vector<Node*> m_children;
std::string m_intro;
};
在做所有其他类之前,我尝试了以下操作:
void saveTest( const Node &test, const char* filename)
{
// make an archive
std::ofstream ofs(filename);
boost::archive::xml_oarchive oa(ofs);
oa << BOOST_SERIALIZATION_NVP(test);
}
void createTest()
{
Node* test = new Node();
Node* question1 = new Node();
question1->setIntro("Question 1");
test->addChildNode(question1);
test->setIntro("Test");
saveTest( *test, fileLocation.c_str() );
}
但是这会抛出一个异常,并且只创建以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="10">
<test class_id="0" tracking_level="1" version="0" object_id="_0">
<children class_id_reference="0" object_id="_1">
<children</boost_serialization>
这是一个简单的修复;看到这里的一个示例后,我更改了以下内容:
std::vector<Node*> m_children;
boost::ptr_vector<Node> m_children;
需要以下内容:
#include <boost/ptr_container/serialize_ptr_vector.hpp>
然而,我不确定为什么会这样(对象可能没有被跟踪?),所以一个解释将是受欢迎的!
相关文章:
- 如何在C++中序列化结构数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 使用指向 struc 的指针序列化结构
- C++ 提升 - 包含类层次结构对象的类的序列化
- 如何从平面缓冲区中反序列化联合结构的 void* 值的大小
- 将载体和cv :: mat to Disk的存储结构 - C 中的数据序列化
- 序列化没有"save"方法的大型结构
- 在 C# 中序列化这些值以在C++中作为已知结构正确读取时遇到问题
- 如何在结构中序列化unique_ptr<char[]>
- 我的数据结构的最佳序列化方法
- 分段错误:C++中的结构序列化和 MPI 数据传输
- 跳过层次结构中的中间类,并使用boost ::序列化
- Boost::序列化存储结构时的堆栈溢出错误
- 在 C++ 中将序列化的 Thrift 结构序列化为 Kafka
- C 使用谷物序列化结构的静态阵列
- 如何使用结构序列化映射
- C 结构序列化
- 协议缓冲区、Apache Thrift或任何其他数据结构序列化协议中的递归数据结构
- 将结构序列化/反序列化为二进制数据包