Я начинаю использовать boost :: serialization в XML-архивах. Я могу производить и читать данные, но когда я вручную изменяю 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>
Теперь я заменяю весь код в основной функции читателем:
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, в котором я изменил порядок двух строк «продюсер» и «производитель_версия», он все еще работает и выдает «0.0.1 XXX».
Таким образом, он не может распознать, что у тегов нет ожидаемых имен, и просто продолжить. Я ожидал бы, что это вызовет исключение xml_archive_parsing_error
, как указано в документ .
Кто-то здесь имеет опыт с этим? Что я делаю не так?