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




сайт github (3)

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

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

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


Answers

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

Да, вы должны иметь возможность использовать 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 ++ 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 ввода-вывода и округления и многие другие часы, и т. д., поэтому вы можете по-прежнему хотеть взглянуть на ускорение, прежде чем действительно отклонить их.


Существует библиотека Pythy которая пытается эмулировать этот синтаксис. Однако он будет работать только на clang. Это не работает на gcc из-за этих ошибок here и here . Они могут быть исправлены для gcc 4.9, но если вы используете gcc 4.9, вы можете использовать типы автоматического возврата, так или иначе.





c++ boost c++11