С чего начать обучение использованию библиотек Boost?

16

Boost недавно стал доступен для проекта, над которым я работаю, и у меня нет особого опыта работы с ним. Библиотека имеет так много частей и функций, что трудно понять, с чего начать ее изучение - тем более, что я буду пытаться изучать ее при создании производственного кода (поэтому она не может сильно меня затормозить).

Я был бы очень признателен, если бы кто-нибудь мог перечислить от 3 до 5 функций, которые очень полезны в общем, повседневного программирования и указать, почему они полезны. Тогда я могу начать изучать их и использовать их - это, по крайней мере, даст мне точку опоры в библиотеке и удобное место, чтобы начать изучать его / применять его :)

Заранее спасибо!

Джон Хамфрис - w00te
источник
Я не понимаю фразу «точка опоры в библиотеке» в этом контексте. Что не так с книгами? Есть несколько на эту тему от обычных продавцов, поэтому обязательным условием является наличие их на книжной полке вашей команды.
Aquaherd
Я все время читаю для программирования - у меня нет времени, чтобы прочитать книгу или справочное руководство по форсированию, чтобы узнать все, что у него есть, и полезно ли это в данный момент. Я хотел бы начать использовать его здесь и там и медленно поднимать его во время работы, и я хотел бы привести несколько основных примеров действительно полезных компонентов повышения. Например, в «Эффективном С ++» Скотта Мейерса говорится о shared_ptr без остановок (и очень мало чего еще), потому что это так хорошо. Что еще необычно полезно в бусте?
Джон Хамфрис -
Лично мне очень понравились макросы BOOST_FOREACH, шаблоны наблюдателя / подписчика, регулярные выражения, анализаторы даты / времени (фасеты), но я либо столкнулся с ними случайно, модифицируя существующее повышение с помощью кода или, как обрисовал в общих чертах DeadMG. Я только поцарапал верхушку айсберга, которая является бустом, но это было похоже на естественное продолжение STL.
Aquaherd

Ответы:

8

Если вы используете компилятор до TR1, то умные указатели

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

Если ваш компилятор уже имеет умные указатели, используйте их.
Причина очевидна, C ++ без умных указателей в принципе не является C ++

Расширенные библиотеки ptr_contaier.

Все контейнеры STL заново реализованы специально для хранения указателей. Контейнеры не только становятся владельцами указателей, поэтому, когда контейнер уничтожается, он автоматически уничтожает все указатели. НО он также обеспечивает доступ к элементам в виде обычных ссылок на объекты (не указателей), что позволяет легко использовать объекты в стандартных алгоритмах без функторов-обёрток.

Повышение лямбда-библиотеки. (см. комментарий ниже)

Функторы и связующие STL подходят для простых вещей. Но boost :: lambda сделал следующий шаг и намного упростил использование стандартных алгоритмов.

Boost :: любой и Boost :: вариант

Когда вам нужно держать объекты, не желая знать их точный тип.

мульти Индекс Контейнеры

Контейнеры, которые позволяют множеству различных способов доступа к элементам.
Прошли те времена, когда у вас есть вектор объектов и отдельная карта для быстрого поиска вектора. Это сокращает шаблон, который нужно написать, чтобы сохранить два контейнера при вставке / удалении элементов в контейнеры.

повышение :: lexical_cast

Вероятно, наименее полезным в реальной жизни, но с ним очень весело играть, это boost :: lexical_cast. Он преобразует любой объект в / из строки (при условии, что для этого типа определены соответствующие операторы << и >>). Очень полезно для сброса сообщений об ошибках при отладке.

Мартин Йорк
источник
1
Boost.Phoenix официально заменил Boost.Lambda, который сейчас считается устаревшим. Пожалуйста, порекомендуйте первый, а не последний для нового кода. : -]
ildjarn
16

Повышение не является ни рамкой, ни библиотекой. Это проверенная библиотекой коллекция с проверкой качества. Вы не изучаете Boost. Библиотеки индивидуальны - когда вам что-то нужно, вы проверяете, находится ли оно в Boost, если оно есть, то вы изучаете эту библиотеку. Вот и все. Вы не можете понять, что такое Boost :: Option.

DeadMG
источник
4
Можно сказать, что повышение - это знак качества и набор для распространения.
Klaim
1

Boost - это коллекции библиотек. В следующий раз, когда вы создадите код ката, выберите библиотеку в Boost, которая, по вашему мнению, может вам помочь, и используйте ее. Документация очень хорошая, и у вас не должно быть проблем с подбором простого использования. Более сложные придут, когда вы попытаетесь сделать более умные вещи.

Пример: потокобезопасный синглтон с boost :: thread call_once.

Пример: чтение файла конфигурации ключ: значение с помощью токенизатора.

Сардатрион - Восстановить Монику
источник