Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

Например:

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

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

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

портативность на 99%.

Я бы сказал, что в нем есть довольно много библиотек, которые действительно полезны, как только вы обнаружите потребность, которая решается с помощью boost.Либо вы кодируете его сами, либо используете очень надежную библиотеку.Наличие готового исходного кода для таких вещей, как Мультииндекс, Лямбда, Параметры программы, регулярные выражения, SmartPtr и Tuple, просто потрясающе...

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

Достойно!!

Вы получаете многое из того, что появляется в 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), a лексер / синтаксический анализатор DSL (Поднимает Настроение):

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

и это только кажется на первый взгляд...

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

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

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

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

Ты можешь начните с boost здесь.

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top