gpt4 book ai didi

c++ - Boost序列化树结构

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:46 25 4
gpt4 key购买 nike

我正在尝试构建一个树状结构来进行由一系列问题组成的测试。

想法是 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;
};

在学习所有其他类(class)之前,我尝试了以下内容:

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>

如有任何见解,我们将不胜感激。

最佳答案

事实证明这是一个简单的修复;看过一个例子here ,我更改了以下内容:

std::vector<Node*> m_children;

boost::ptr_vector<Node> m_children;

需要包含以下内容:

#include <boost/ptr_container/serialize_ptr_vector.hpp>

但是,我不确定为什么会这样(可能没有跟踪对象?),所以欢迎解释!

关于c++ - Boost序列化树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609485/

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