
Boost — огромный набор библиотек.
346 страниц. ДМК Пресс, 2020
Antony Polukhin. Boost C++ Application Development Cookbook. Packt, 2013
Антон Полухин — автор нескольких библиотек Boost, поддерживает ряд старых библиотек и сейчас представляет Россию в международном комитете по стандартизации C++.
Оглавление:
Последняя глава посвящена графам, генератору истинно случайных чисел, переносимым математическим функциям, объединению нескольких тестовых случаев в одном тестовом модуле и манипулированию изображениями.
$ ./our_program.exe --apples=10 --oranges=20
Fruits count: 30
Какие-то вещи уже устарели, потому что стали частью стандарта, например, Boost.Any, Boost.Variant, Boost.Optional, Boost.Tuple, Boost.Bind, Boost.Move (семантика перемещения до C++11), Boost.SmartPtr, Boost.Function. Какие-то вещи просто любопытны. Как, например, имитация finally из языка Java. Полезных вещей в книге можно подсмотреть много, скажем, синтаксический анализ (parsing) сложного ввода с помощью Boost.Spirit. Там используется расширенная форма Бэкуса — Наура (РБНФ, Extended Backus–Naur Form; EBNF).
const bool success = boost::spirit::qi::parse(first, end,
u4_[y] >> char_('-') >> u2_[m] >> char_('-') >> u2_[d]
);
Книга рассказывает о многих вещах, но довольно поверхностно. Но как ознакомительный обзор вполне годится.
304 страницы. Питер, 2006
Jeremy G. Siek, Lie-Quan Lee, Andrew Lumsdaine. The Boost Graph Library. Addison-Wesley, 2002
Книга по довольно сложной части библиотеки Boost — графовой библиотеке.
Часть I — основные алгоритмы, поиск кратчайшего пути, минимальное о́стовное дерево, компоненты связности, максимальный поток, неявные графы («обход конём»), а также взаимодействие с другими графовыми библиотеками и производительность. Часть II — справочник.
Авторы подробно рассказывают о библиотеке, показывают на примерах, приближённых к реальным, как ею пользоваться: это интернет-маршрутизация, планирование телефонных сетей, задачи молекулярной биологии.
Предисловия Александра Степанова — отдельный жанр. В этом своём четырёхстраничном эссе Александр Александрович успевает снова кратко изложить идеи обобщённого программирования, упомянуть что-нибудь сложное (multi-sorted algebras — многосортные алгебры), написать код на Лиспе, похвалить C++ за выразительность и тут же поругать:
«В шаблонах отсутствует разделение между интерфейсами и реализацией. Например, недавно я пытался откомпилировать пример STL-программы из десяти строк, используя один из наиболее популярных компиляторов C++... Я был в шоке, увидев несколько страниц неразборчивых сообщений об ошибках».
За прошедшие два с лишним десятка лет в языке появились концепции, которых для ещё большей выразительности раньше не хватало. Тогда использовались собственные инструменты библиотеки Boost вместо полноценных концепций. Иначе, как показали авторы, сообщения даже из-за каких-то небольших ошибок были бы абсолютно непонятными, даже сбивающими с толку.
Содержание первой части:
Вторая часть (а это половина книги) — справочное руководство.
Книга не только рассказывает о графах и о том, как пользоваться библиотекой. Также есть главы, которые объясняют, почему во время проектирования создатели выбрали то или иное решение. Например, в деталях описана проблема бинарного метода.
Поизучать, как устроена библиотека BGL, стоит уже хотя бы ради того, чтобы посмотреть, как проектируют библиотеки в рамках парадигмы обобщённого программирования. Там пересекаются многие темы, причём иногда с неожиданной стороны: специализация шаблонов, поиск Кёнига, типажи (traits) и т. д.
В качестве примера строится граф на основе файла с данными об актёрах (для разбора используется библиотека Boost Tokenizer Library), нужно найти кратчайший путь от заданного актёра до Кевина Бэкона. Такую задачу решают в Университете Вирджинии.