XMLアーカイブでboost::serializationを使い始めています。データを生成して読み取ることはできますが、XMLを手動で変更し、2つのタグを交換すると、「失敗しません」(つまり、正常に進行します)。
これが私が見ているものを示す小さな、自己完結した例です:
#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関数のすべてのコードをリーダーに置き換えます。
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;
これは、前の出力(出力「XXX0.0.1」)をフィードしたときに期待どおりに機能します。ただし、「producer」と「producer_version」の2行の順序を変更したXMLをフィードすると、引き続き実行され、「0.0.1XXX」が出力されます。
したがって、タグに期待される名前がないことを認識できず、続行します。ドキュメントxml_archive_parsing_error
に示されているように、例外がスローされると予想していました。
ここの誰かがそれを経験したことがありますか?私が間違っていることは何ですか?