我开始在 XML 档案上使用 boost::serialization。我可以生成和读取数据,但是当我手动修改 XML 并交换两个标签时,它“失败失败”(即它顺利进行)。
这是一个小的,自我完整的例子,展示了我所看到的:
#include <iostream>
#include <fstream>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/split_member.hpp>
using namespace std;
int main (void)
{
boost::archive::xml_oarchive oa (cout);
static const string producer = "XXX", version = "0.0.1";
oa << boost::serialization::make_nvp ("producer", producer);
oa << boost::serialization::make_nvp ("producer_version", version);
}
这会将 XML 写入标准输出,其中包含:
<producer>XXX</producer>
<producer_version>0.0.1</producer_version>
现在,我将 main 函数中的所有代码替换为 reader:
boost::archive::xml_iarchive ia (cin);
string producer, version;
ia >> boost::serialization::make_nvp ("producer", producer);
ia >> boost::serialization::make_nvp ("producer_version", version);
cout << producer << " " << version << endl;
当输入前一个输出(输出“XXX 0.0.1”)时,它按预期工作。但是,如果我输入 XML 并更改了“producer”和“producer_version”两行的顺序,它仍然会运行并输出“0.0.1 XXX”。
因此,它无法识别标签没有预期的名称,然后继续。我本来希望它会引发xml_archive_parsing_error
异常,如doc中所示。
这里有人有这方面的经验吗?我做错了什么?