Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

XercesInitializer init;

DOMImplementation* impl =

DOMImplementationRegistry::getDOMImplementation(

fromNative("LS").c_str()

);

if (impl == 0) {

cout << "couldn't create DOM implementation\n";

return EXIT_FAILURE;

}

// Сконструировать DOMBuilder для синтаксического анализа

// документа animals.xml.

DOMPtr parser =

static cast(impl)-> createDOMBuilder(

DOMImplementationLS::MODE_SYNCHRONOUS, 0

);

CircusErrorHandler err;

parser->setErrorHandler(&err);

// Выполнить синтаксический анализ

animals.xml. DOMDocument* doc =

parser->parseURI("animals.xml");

DOMElement* animalList = doc->getDocumentElement();

// Создать XPath-выражение.

auto_ptr

evaluator(XPathEvaluator::createEvaluator());

auto_ptr

resolver(evaluator->createNSResolver(animalList));

auto_ptr xpath(

evaluator->createExpression(FromNative(

"animalList/animal[child::name='Herby']" ).c_str(), resolver.get()

)

);

auto_ptr evaluator(XPathEvaluator::createEvaluator());

auto_ptr resolver(evaluator->createNSResolver(animalList));

auto_ptr xpath(evaluator->createExpression(

fromNative("animalList/animal[child::name='Herby']").c_str(),

resolver.get()

));

// Вычислить выражение.

XPathResult* result = xpath->evaluate(doc,

XPathResult::ORDERED_NODE_ITERATOR_TYPE, 0

);

DOMNode* herby;

if (herby = result->iterateNext()) {

animalList->removeChild(herby);

herby->release(); // optional

}

// Сконструировать DOMWriter для сохранения animals.xml

DOMPtr writer =

static_cast(impl)->createDOMWriter();

writer->setErrorHandler(&err);

// Сохранить animals.xml.

LocalFileFormatTarget file("circus.xml");

writer->writeNode(&file, *animalList);

} catch (const DOMException& e) {

cout << toNative(e.getMessage()) << "\n";

return EXIT_FAILURE;

} catch (const XPathException &e) {

cout << e.getString() << "\n";

return EXIT_FAILURE;

} catch (const exception& e) {

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

return EXIT_FAILURE;

}

}

Пример 14.24 использует Pathan 1, который реализует рекомендации XPath 1.0; библиотекой Xalan в настоящее время поддерживается именно эта версия. Pathan 2, который в настоящее время доступен в бета-версии, обеспечивает предварительную реализацию рекомендаций XPath 2.0. Pathan 2 представляет собой более точную реализацию стандарта XPath; я рекомендую использовать Pathan 2 вместо Pathan 1, как только станет доступна не бета-версия.

Смотри также

Рецепт 14.7.

14.9. Применение XML для сохранения и восстановления набора объектов

Проблема

Требуется иметь возможность сохранения набора объектов C++ в документе XML и считывания их потом обратно в память.

Решение

Используйте библиотеку Boost Serialization. Эта библиотека позволяет сохранять и восстанавливать объекты, используя классы, называемые архивами . Для использования этой библиотеки вы должны сначала сделать каждый из ваших классов сериализуемым (serializable) , что просто означает возможность записи экземпляров класса в архив (это называется сериализацией ) и их обратного считывания в память (это называется десериализацией ). Затем на этапе выполнения вы можете сохранить ваши объекты в архиве XML, используя оператор <<, и восстановить их, используя оператор >>.

Чтобы сделать класс сериализуемым, добавьте шаблон функции-члена serializeсо следующей сигнатурой.

template

void serialize(Archive& ar, const unsigned int version);

В реализации serializeнеобходимо обеспечить запись каждого данного-члена класса в указанный архив в виде пары «имя-значение», используя оператор &. Например, если вы хотите сериализовать и десериализовать экземпляры класса Contactиз примера 14.2, добавьте функцию-член serialize, как это сделано в примере 14.25.

Пример 14.25. Добавление поддержки сериализации в класс Contact из примера 14.2

#include // пара "имя-значение"

class Contact {

...

private:

friend class boost::serialization::access;

template

void serialize(Archive& ar, const unsigned int version) {

// Записать (или считать) каждое данное-член в виде пары имя-значение

using boost::serialization::make_nvp;

ar & make_nvp("name", name_);

ar & make_nvp("phone", phone_);

}

...

};

Аналогично можно обеспечить сериализацию класса Animalиз примера 14.2, как это сделано в примере 14.26.

Пример 14.26. Добавление поддержки сериализации для класса Animal из примера 14.2

...

// Включить поддержку сериализации для boost::gregorian::date

#include

...

class Contact {

...

private:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x