сайт - stl c++




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

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

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

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

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

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

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

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

Только мои $ 0,02

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

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

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


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

TR1 (они отмечены в documentation если это библиотеки TR1)

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

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

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

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

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

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







c++11