Библиотека ускорения

С тех пор, как я начал пользоваться этим сайтом, я постоянно слышу о библиотеке Boost. Мне интересно, каковы некоторые из основных преимуществ библиотеки Boost (поэтому почему я должен ее использовать) и насколько переносима библиотека Boost?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
53
0
11 092
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Boost - это набор библиотек C++. 10 из которых включены в tr1 C++ 0x.

Вы можете начните с повышения здесь.

Вы получаете многое из того, что есть в C++ 0x. Но помимо этой общности, некоторые из лучших особенностей - это простой библиотека регулярных выражений, библиотека приведения для приведение строк к целым (лексическое приведение):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

A библиотека даты / времени, среди прочего ...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

Также есть Интерфейс Python (Boost Python), лексер / парсер DSL (Boost Spirit):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

и это просто царапина на поверхности ...

Мне нравится этот ответ, поскольку он показывает реальные варианты использования Boost.

rluks 22.01.2016 16:05

Boost - это очень обширная библиотека (обычно) общих конструкций, которая может помочь практически в любом приложении. Об этом может свидетельствовать тот факт, что в спецификации C++ 0x было включено множество компонентов ускорения.

Он также переносится, по крайней мере, на основные платформы, и должен быть переносимым практически на все, что связано с компилятором C++, в основном совместимым со стандартами.

Единственное предупреждение заключается в том, что между библиотеками boost может быть много смешанных зависимостей, что затрудняет выбор только определенного компонента для распространения (кроме всей библиотеки boost).

Как дополнение к этому сообщению: для извлечения подмножеств Boost вы можете использовать утилиту bcp boost.org/doc/libs/1_36_0/tools/bcp/bcp.html

jk. 29.09.2008 19:50

На самом деле внутризависимостей относительно мало. Это конкретная цель дизайна Boost. boost.org/development/reuse.html

Greg Rogers 29.09.2008 19:52

Большая часть Boost реализована только в виде заголовка. Что касается остальных вещей, вам, вероятно, лучше связать его статически, чем распространять библиотеки DLL / общие библиотеки.

Ferruccio 24.10.2008 05:18

Вы можете просто прочитать страницу Повышение фоновой информации, чтобы получить краткий обзор того, почему вам следует использовать Boost и для чего вы можете его использовать. Стоит потратить несколько минут.

Я удивлен, что автор этого вопроса не подумал это прочитать.

PP. 17.11.2009 16:48

В его защиту, теперь он доступен здесь и доступен для поиска всем на сайте (и, вероятно, занимает высокое место в результатах поиска Google).

Justin Ethier 05.03.2010 06:50
Ответ принят как подходящий

Boost организован несколькими членами стандартного комитета. Так что это питательная среда для библиотек, которые войдут в следующий стандарт.

  1. Это расширение STL (заполняет оставленные биты)
  2. Это хорошо задокументировано.
  3. Это хорошо рецензировано.
  4. Он имеет высокую активность, поэтому ошибки обнаруживаются и исправляются быстро.
  5. Он не зависит от платформы и работает везде.
  6. Это бесплатно.

В связи с появлением tr1 в ближайшее время приятно осознавать, что над бустом уже многое сделано. Многие библиотеки в tr1 в основном адаптированы непосредственно из оригиналов boost и, таким образом, были опробованы и протестированы. Разница в том, что они были перемещены в пространство имен std :: tr1 (а не в усиление).

Все, что вам нужно сделать, это добавить следующее к включить путь поиска вашего компилятора по умолчанию:

<boost-install-path>/boost/tr1/tr1

Затем, когда вы включаете стандартные заголовки, boost автоматически импортирует все необходимые данные в пространство имен std :: tr1

Например:

Чтобы использовать std :: tr1 :: share_ptr, вам просто нужно включить <memory>. Это даст вам все умные указатели в одном файле.

Способствовать росту - это набор высококачественных рецензируемых библиотек C++, в которых особое внимание уделяется переносимости и корректности. Фактически он действует как полигон для новых дополнений к языку и стандартной библиотеке. Посетите их веб-сайт для получения более подробной информации.

Преимущества Boost: Он широко доступен, может быть перенесен на любой современный компилятор C++ или на любую платформу. Функции не зависят от платформы, вам не нужно изучать новый дизайн потоков для каждой новой платформы. Он стандартным образом инкапсулирует множество специфичных для платформы функций, таких как файловые системы.

Это то, с чем должен был поставляться C++! Большая часть популярности Java заключалась в том, что она поставляется со стандартной библиотекой, позволяющей делать почти все, что вы хотели. К сожалению, C++ унаследовал только ограниченные стандартные функции C / Unix.

99% портативный.

Я бы сказал, что у него довольно много библиотек, которые действительно полезны, когда вы обнаруживаете потребность, которая решается с помощью boost. Вы либо сами кодируете, либо используете очень надежную библиотеку. Наличие готовых исходников для таких вещей, как Multi-Index, Lambda, Program Options, RegEx, SmartPtr и Tuple - это потрясающе ...

Лучше всего потратить некоторое время на изучение документации по различным библиотекам и оценку того, может ли она быть вам полезна.

Достойный!!

Несколько лет назад некоторые части Boost не работали на компиляторах C++ от Sun и IBM. Не уверен в ситуации, но я бы не стал оценивать портативность где-то рядом с 99%.

John Zwinck 24.11.2008 04:03

@john еще раз проголосовал за этот комментарий. Компилятор Borland / CodeGear / Embarcadero также не может работать со многими частями повышения.

greatwolf 30.12.2011 07:20

Все вышеперечисленное, а также поощряет использование множества современных передовых методов C++. Это улучшает качество вашего кода.

Boost - это здорово, но просто играя в Devil's Advocate, вот несколько причин, по которым вы можете не захотеть использовать Boost:

  • Иногда не компилируется / не работает должным образом на старых компиляторах.
  • Это часто увеличивает время компиляции больше, чем подходы с меньшим количеством шаблонов.
  • Некоторый код Boost может не делать то, что вы думаете. Прочтите документацию!
  • Злоупотребление шаблоном может привести к нечитаемым сообщениям об ошибках.
  • Злоупотребление шаблоном может привести к тому, что код будет трудно выполнить в отладчике.
  • Это новейший C++. Следующая версия Boost может больше не компилироваться на вашем текущем (более старом) компиляторе.

Все это не означает, что вам не следует заглядывать в код Boost и самому черпать идеи, даже если вы не используете Boost как таковой.

С пунктом 5: Согласен! Попробуйте отладить библиотеку графов ускорений ...

Raindog 17.11.2008 03:28

Только shared_ptr и weak_ptr, особенно в многопоточном коде, заслуживают установки boost. BOOST_STATIC_ASSERT также неплохо подходит для проверки логики во время компиляции.

Тот факт, что многие классы и утилиты в boost находятся в заголовках, что означает, что вы можете получить большую функциональность без необходимости вообще ничего компилировать, также является плюсом. Переносимость обычно не проблема, если вы не используете очень старый компилятор. Однажды я попытался заставить MPL работать с VC6, и он распечатал 40 000 предупреждений / внутренних ошибок, прежде чем полностью взорваться. Но в целом большая часть библиотеки должна работать независимо от вашей платформы или поставщика компилятора.

Примите во внимание тот факт, что довольно много вещей из Boost уже есть в TR1 и, скорее всего, будут в следующей версии стандартной библиотеки C++. Это довольно большая поддержка.

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

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

Другие вопросы по теме