Когда я обнаружил, boost::lexical_cast
то подумал: "Почему я не узнал об этом раньше!" - Я ненавидел писать такой код, как
stringstream ss;
ss << anIntVal;
mystring = ss.str();
Сейчас пишу
mystring = boost::lexical_cast<string>(anIntVal);
Вчера в stackoverflow я наткнулся на сплит-буст (еще одна жемчужина, которая избавит меня от написания кода).
string stringtobesplit = "AA/BB-CC")
vector<string> tokens;
boost::split(tokens, stringtobesplit, boost::is_any_of("/-"));
// tokens now holds 3 items: AA BB CC
Я собираюсь начать просматривать документацию по boost в поисках других функций, которые я смогу использовать регулярно, но я чувствую, что будет очень легко упустить что-то.
Какие функции повышения вы используете больше всего / не хотели бы иметь?
Ответы:
Вероятно, самая используемая часть boost для меня - boost :: shared_ptr .
источник
std::shared_ptr
иstd::unique_ptr
.BOOST_FOREACH снова делает жизнь стоящей.
(Почему об этом никто не упомянул? Вопрос задан 8 месяцев назад!)
источник
Мои любимые, в произвольном порядке:
Boost мне очень помог, когда я написал свое первое кроссплатформенное приложение - без него мне действительно пришлось бы бороться.
источник
Мне нравится, как вы можете предоставить свой собственный деструктор для
shared_ptr
.Это означает, например, что вы можете использовать его
FILE*
и заставить закрыть файл за вас.например
источник
NULL
бесполезно, поскольку оно присваивает параметр локальной функции. :)Никто не упомянул о мультииндексных контейнерах, поэтому я напишу позже. Это не так часто, что они вам нужны, но без ускорения создать эквивалентную структуру данных, а также быть менее эффективным - настоящая боль. В последнее время я часто использую их для создания контейнеров, которые просматривают 2 ключа.
источник
Я удивлен, что никто не упомянул
boost::optional
. Я использую его чаще, чем любую часть Boost, кромеshared_ptr
иscoped_ptr
.источник
std::experimental::optional
и скоро (C ++ 17?) Какstd::optional
.Никто не упоминает boost :: tuple? Позор!
источник
std::tuple
.BOOST_STATIC_ASSERT
Обновление (октябрь 2011 г.): C ++ 11 (C ++ 0x) имеет
static_assert
http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertисточник
Один из наиболее часто используемых мной - это не собственно Boost, а библиотеки исходного кода Adobe (ASL), построенные на основе Boost - в частности, расширения стандартных алгоритмов, которые принимают boost :: range вместо отдельных итераторов начала / конца. Тогда вместо звонка, скажем,
Я могу просто сказать
(Я действительно надеюсь, что эти части ASL со временем перейдут на Boost.)
источник
Я использую много:
Другие, такие как Tuple, Static Assert и Integer, очень полезны, если вы пишете библиотеку, которая должна использоваться на различных платформах.
Такие вещи, как графики и лямбда, более конкретны.
источник
boost::shared_ptr
это требование для современного программирования на C ++ ИМХО. Вот почему они добавили его в стандарт с TR1.boost::program_options
,,boost::bind
иboost::signal
действительно хороши, если вы знаете, для чего они нужны и как их использовать. Однако последние два, как правило, пугают новичков.источник
Мы нашли boost :: spirit очень полезным для бизнес-решения для синтаксического анализа ECMAScript. Сложно, но очень красиво!
источник
Я удивлен, что пока не вижу между ответами Boost.Thread .
источник
std::thread
.Я использую shared_ptr уже много лет. Это настолько полезно, что нет причин, по которым проект должен быть без него.
Кроме того, я также использую Bind / Function / Lambda для общих механизмов обратного вызова - особенно полезно при тестировании - а также Format для моей универсальной замены sprintf.
Наконец, буквально на днях я использовал Variant в гневе для решения проблемы (парсер, который мог отвечать небольшим фиксированным набором несвязанных типов токенов). Решение было очень элегантным, и я очень им доволен.
Прошли годы, времена изменились, так что пришло время для обновления. SharedPtr и Function теперь являются частью Standard, а Bind и Lambda устарели из-за фактических лямбда-функций на уровне языка.
Я все еще использую Variant (который также был стандартизирован, но я еще не дошел до него), Format в значительной степени заменен fmtlib (который также был стандартизирован).
Большая часть Boost, которую я использую, - это Boost.Asio. Что находится в процессе стандартизации.
источник
Использование кортежей для итерации карты, например:
Используя назначение boost, я могу инициализировать карту следующим образом:
А с помощью адаптеров диапазона и оператора вертикальной черты ("|") я могу перебирать значения карты назад (в качестве примера):
источник
Вы должны проверить boost :: program_options. Это значительно упрощает синтаксический анализ командной строки.
источник
Я использую контейнеры Boost Pointer, а не контейнер
shared_ptr
s.источник
Я довольно часто использую boost :: numeric :: ublas :: matrix .
источник
Я люблю boost :: random и boost :: asio и boost :: filesystem, однако boost :: bind, boost :: round_buffer и boost :: thread очень практичны, интеллектуальные указатели в порядке, но я предпочитаю RAII вместо управления памятью
источник
Хорошо, вот новый, который я нашел:
вместо использования stricmp я могу использовать функцию boost equals и передать предикат is_iequal,
например:
вместо
я могу использовать
дано:
источник
Вот мои два цента:
источник
Я
boost::icl
довольно много использую для постобработки текста. Сэкономил мне довольно много времени, потому что иначе мне пришлось бы реализовать разбиение текста самостоятельно ...BOOST_FOREACH
везде в моем коде :)boost::function
иboost::bind
абсолютно необходимы. Хотя сейчас ониstd::function
и естьstd::bind
. Это действительно помогает уменьшить количество ненужного кода и в целом хорошо подходит для моих проектов (или моих заблуждений).Я недавно начал использовать,
boost::interprocess::message_queue
и это тоже отличный инструмент.Я бы использовал гораздо больше, но у Qt есть собственные способы делать много вещей, которые делает Boost. Если бы мне когда-нибудь пришлось программировать чистый C ++, я бы, наверное, стал
boost::junkie
:)источник
То, что я использую больше всего, теперь доступно в TR1:
Теперь я также использую классы пула и некоторые другие более специфические вещи.
Теперь вы понимаете, что Boost предназначен для использования большинством программистов, поэтому он является испытательной площадкой для будущей стандартной библиотеки.
источник
Говоря о boost :: lexical_cast, почему что-то вроде 'format' не является статическим членом в библиотеке std :: string?
Практически во всех библиотеках графического интерфейса есть что-то вроде CString :: Format ("% i") или QString :: Number ("% i"), которые возвращают инициализированную строку.
источник
std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
Думаю, вопрос следует изменить. Какую часть своего буста вы не хотели бы использовать?
По моему опыту, почти все это интересно и полезно в каждой проблемной области.
Вам следует потратить время на изучение документации по бустам, чтобы найти области, которые охватывают ваши интересы.
Одним исключением может быть то,
boost::numeric::ublas
что он выполняет свою работу, но Eigen делает это заметно лучше.источник