Какие функции Boost перекрываются с С++ 11?

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

Теперь у нас есть С++ 11, и я понимаю, что он перекрывает многие функции Boost.

Есть ли какое-то резюме, где эти перекрытия лежат, какие библиотеки Boost станут наследием, рекомендации о том, какие функции С++ 11 использовать вместо повышения, а какие лучше?

Ответ 1

Сменные функции языка или библиотеки языка С++ 11

TR1 (они отмечены в документации, если это библиотеки TR1)

Возможности back-ported из С++ 11:

  • Atomic ← std:: atomic
  • Chrono ← <chrono> (см. ниже).
  • Move ← Ссылки на ссылки

Сменные возможности языка С++ 17:

Стандартная команда все еще работает над этим:

Большая часть MPL может быть уменьшена или удалена с использованием вариативных шаблонов. Некоторые распространенные случаи использования Лексический листинг можно заменить на std:: to_string и std:: sto X.

Некоторые библиотеки Boost связаны с С++ 11, но также имеют некоторые дополнительные расширения, например. Boost.Functional/Hash содержит hash_combine и связанные функции не найдены в С++ 11 Boost.Chrono имеет операции ввода-вывода и округления и многие другие часы и т.д., поэтому вы все еще можете взглянуть при ускорении, прежде чем действительно уволить их.

Ответ 2

На самом деле, я не думаю, что библиотеки ускорения станут наследием.

Да, вы должны использовать std::type_traits, regex, shared_ptr, unique_ptr, tuple<>, std::tie, std::begin вместо Boost Typetraits/Utility, Boost Smartpointer, Boost Tuple, Библиотеки Boost Range, но на практике не обязательно "переключаться", если вы не переместили больше своего кода на С++ 11.

Кроме того, по моему опыту, версии std большинства из них несколько менее характерны. Например. AFAICT стандарт не имеет

  • Регулярные выражения Perl5
  • шаблон call_traits
  • Определенные элементы интерфейса регулярного выражения (например, bool boost::basic_regex<>::empty()) и различия в интерфейсе
    • это больше укусов, поскольку интерфейс Boost точно совпадает с Boost Xpressive
    • и он играет намного лучше с помощью алгоритмов Boost String Очевидно, что у последних нет стандартных экземпляров (пока?)
  • Многие вещи, относящиеся к TMP (Boost Fusion)
  • Lazy, основанные на шаблонах lambdas; они имеют неизбежные преимущества в том, что сегодня они могут быть полиморфными, в отличие от С++ 11. Поэтому они часто могут быть более краткими:

     std::vector<int> v = {1,2,-9,3};
    
     for (auto i : v | filtered(_arg1 >=0))
         std::cout << i << "\n";
    
     // or:
     boost::for_each(v, std::cout << _arg1);
    

    Скорее всего, это все еще имеет некоторое отношение к С++ 11 lambdas (с возвращаемыми типами возврата, явным захватом и объявленными параметрами).

Кроме того, для Boost существует БОЛЬШАЯ роль, в частности, для облегчения миграции по пути от С++ 03 до С++ 11 и интеграции кодовых баз С++ 11 и С++ 03. Я особенно думаю о

  • Boost Auto (BOOST_AUTO)
  • Утилита Boost (boost::result_of<> и связанная)
  • Boost Foreach (BOOST_FOREACH)
  • Не забывайте: Boost Move - что позволяет писать классы с семантикой перемещения с синтаксисом, которые будут одинаково хорошо компилироваться на компиляторах С++ 03 с компиляторами Boost 1_48 + и С++ 11.

Просто мои $0.02