数年前に自分のC++スキルを棚に置いていましたが、再び必要になったとき、状況は変わったようです。
現在、C++ 11があります。私の理解では、C++ 11は多くのBoost機能と重複しています。
これらのオーバーラップが存在する要約、レガシーになるブーストライブラリ、ブースト機能の代わりに使用するC++ 11機能の推奨事項、および推奨しないものはありますか?
C++ 11言語機能またはライブラリに置き換え可能
<cmath>
、以下のリストを参照log1p
、expm1
cbrt
、hypot
acosh
、asinh
、atanh
TR1(それらは ドキュメント でマークされます(TR1ライブラリの場合))
C++ 11からバックポートされた機能:
C++ 17言語機能に置き換え可能:
<cmath>
( 特殊数学IS )、以下のリストを参照標準チームはまだ作業中です。
MPL の大部分は、可変長テンプレートを使用して削除または削除できます。 レキシカルキャスト の一般的な使用例は、std :: to_stringとstd :: stoで置き換えることができますバツ。
BoostライブラリにはC++ 11に関連するものがありますが、いくつかの拡張機能もあります。 Boost.Functional/Hash に含まれる hash_combine およびC++ 11にはない関連関数、 Boost.Chrono にはI/Oと丸めがあり、他のクロックなどがありますので、実際にそれらを閉じる前に、ブーストを見てみたいことがあります。
実際、ブーストライブラリがレガシーになるとは思いません。
はい、代わりに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標準がnot持っています
bool boost::basic_regex<>::empty()
など)およびインターフェイスの違い遅延、式テンプレートベースのラムダ。 C++ 11とは対照的に、can多相性todayであるという点で避けられない利点があります。そのため、多くの場合、より簡潔になります。
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ラムダ(後続の戻り値の型、明示的なキャプチャ、および宣言されたパラメータ)に対する魅力がまだあることです。
また、C++ 03からC++ 11へのパス単位の移行を容易にし、C++ 11およびC++ 03コードベースを統合するという点で、Boostには大きな役割があります。私は特に考えています
boost::result_of<>
および関連)ちょうど私の0.02ドル