C++. Сборник рецептов - [200]
>int main() {
> using namespace std;
> using namespace boost::archive; // пространство имен для архивов
> using namespace boost::serialization; // пространство имен для make_nvp
> try {
> // Заполнить список животных
> vector
> 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
> 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
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
Библиотека Boost Serialization обеспечивает наиболее изощренный и гибкий способ сохранения и восстановления объектов C++. Она представляет собой очень сложный фреймворк. Например, она позволяет сериализовать сложные структуры данных, содержащие циклические ссылки и указатели на полиморфные объекты. Более того, применение этой библиотеки совсем не ограничивается сериализацией XML: кроме архивов XML она предоставляет несколько типов текстовых и бинарных архивов. Архивы XML и текстовые архивы являются переносимыми, т.е. данные можно сериализовать в одной системе и десериализовать в другой; бинарные архивы не переносимы, но компактны.
Нет никаких спецификаций, которым соответствовали бы документы XML, полученные при помощи Boost.Serialization, и их формат может изменяться в новых версиях Boost. Поэтому вы не можете использовать эти документы совместно с другими фреймворками сериализации С++. Тем не менее XML-сериализация приносит пользу, потому что сериализованный вывод легко воспринимается человеком и может обрабатываться инструментальными средствами, ориентированными на XML.
Примеры 14.25 и 14.26 демонстрируют интрузивную сериализацию (intrusive serialization): классы >Animal
и >Contact
были модифицированы, чтобы обеспечить их сериализацию. >Boost.Serialization
также поддерживает неинтрузивную сериализацию (nonintrusive serialization), обеспечивая сериализацию классов без модификации их определений при условии доступности всех состояний объекта через его открытый интерфейс. Вы уже видели пример неинтрузивной сериализации в примере 14.27: шаблон >std::vector
допускает сериализацию, несмотря на то что его определение не может модифицироваться конечными пользователями. Фактически все контейнеры стандартной библиотеки являются сериализуемыми; для обеспечения сериализации контейнера, определенного в стандартном заголовочном файле >xxx
, просто включите заголовочный файл boost/serialization/xxx.hpp. Дополнительную информацию о неинтрузивной сериализации вы можете найти в документации Boost.Serialization.
Примеры 14.25 и 14.26 иллюстрируют также двойственную роль оператора >&
: он действует как оператор ><<
при сериализации объекта и как оператор >>>
при десериализации объекта. Это удобно, потому что позволяет реализовать сериализацию и десериализацию одной функцией. Однако в некоторых случаях неудобно использовать одну функцию для сериализации и десериализации; для этого в Boost.Serialization предусмотрен механизм разделения метода
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.