Private-Bookers
C++. Сборник рецептов
вернуться

Когсуэлл Джефф

Шрифт:

Пример 14.27 показывает, как можно использовать Boost.Serialization для сохранения вектора

std::vector
, состоящего из объектов
Animal
, в файле animals.xml и затем для загрузки его обратно в память. В примере 14.28 показано содержимое файла animals.xml после выполнения программы из примера 14.27.

Пример 14.27 Сериализация вектора std::vector, состоящего из объектов Animal

#include <fstream>

#include <boost/archive/xml_oarchive.hpp> // Архив для записи XML

#include <boost/archive/xml_iarchive.hpp> // Архив для чтения XML

#include <boost/serialization/vector.hpp> // Средства сериализации вектора

#include "animal.hpp" // std::vector

int main {

 using namespace std;

 using namespace boost::archive; // пространство имен для архивов

 using namespace boost::serialization; // пространство имен для make_nvp

 try {

// Заполнить список животных

vector<Animal> animalList;

animalList.push_back(

Animal("Herby", "elephant", "1992-04-23",

Contact("Dr. Hal Brown", "(801)595-9627"),

Contact("Bob Fisk", "(801)881-2260")));

animalList.push_back(

Animal("Sheldon", "parrot", "1998-09-30",

Contact("Dr. Kevin Wilson", "(801)466-6498"),

Contact("Eli Wendel", "(801)929-2506")));

animalList.push_pack(

Animal("Dippy", "penguin", "2001-06-08",

Contact("Dr. Barbara Swayne", "(801)459-7746"),

Contact("Ben Waxman", "(801)882-3549")));

// Сконструировать выходной архив XML и сериализовать список

ofstream fout("animals.xml");

xml_oarchive oa(fout);

oa << make_nvp("animalList", animalList);

fout.close;

// Сконструировать входной архив XML и десериализовать список

ifstream fin("animals.xml");

xml_iarchive ia(fin);

vector<Animal> animalListCopy;

ia >> make_nvp("animalList", animalListCopy);

fin.close;

if (animalListCopy != animalList) {

cout << "XML serialization failed\n";

return EXIT_FAILURE;

}

 } catch (const exception& e) {

cout << e.what << "\n";

return EXIT_FAILURE;

 }

}

Пример 14.28. Файл animals.xml после выполнения программы из примера 14.27

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<!DOCTYPE boost_serialization>

<boost_serialization signature="serialization::archive" version="3">

<animalList class_id="0" tracking_level ="0" version="0">

 <count>3</count>

 <item class_id="1" tracking_level="0" version="0">

<name>Herby</name>

<species>elephant</species>

<dateOfBirth class_id="2" tracking_level="0" version="0">

<date>19920423</date>

</dateOfBirth>

<veterinarian class_id="3" tracking_level="0" version="0">

<name>Dr. Hal Brown</name>

<phone>(801)595-9627</phone>

</veterinarian>

  • Читать дальше
  • 1
  • ...
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка