私はC ++のスキルを数年前に棚に置いていましたが、今は再び必要になったときに状況が変わったようです。
C ++ 11を手に入れました。私の理解では、多くのBoost機能と重複しています。
それらの重複が存在するいくつかの概要はありますか?Boostライブラリはレガシーになるでしょう、Boostの代わりにどのC ++ 11機能を使用するべきか、どちらを使用しない方が良いか、という推奨はありますか?
私はC ++のスキルを数年前に棚に置いていましたが、今は再び必要になったときに状況が変わったようです。
C ++ 11を手に入れました。私の理解では、多くのBoost機能と重複しています。
それらの重複が存在するいくつかの概要はありますか?Boostライブラリはレガシーになるでしょう、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 Xに置き換えることができます。
一部のBoostライブラリはC ++ 11に関連していますが、いくつかの拡張機能もあります。たとえば、Boost.Functional / HashにはC ++ 11にはないhash_combineおよび関連関数が含まれ、Boost.ChronoにはI / Oと丸め、およびその他の多くのクロックがあります。など、そのため、実際にそれらを却下する前に、引き続きブーストを確認したい場合があります。
std::unique_ptr
TR1の一部であるとは思いません(移動のセマンティクスが必要なため)
実際、boostライブラリがレガシーになるとは思いません。
はい、あなたは使用することができるはずですstd::type_traits
、regex
、shared_ptr
、unique_ptr
、tuple<>
、std::tie
、std::begin
あなたがより多くの移動している場合を除き、代わりにブーストTypetraits /ユーティリティのSmartpointerブースト、タプルをブースト、レンジライブラリブーストが、実際には「スイッチ」への本当の必要があってはなりませんコードをc ++ 11に変換します。
また、私の経験ではstd
、これらのほとんどのバージョンはあまり機能的ではありません。例えばAFAICT標準ではないではない持っています
bool boost::basic_regex<>::empty()
)とその他のインターフェースの違い
遅延、式テンプレートベースのラムダ。それらは、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ラムダよりも魅力的です(後続の戻り値型、明示的なキャプチャー、宣言されたパラメーターがあるため)。
また、C ++ 03からC ++ 11へのパス単位の移行を容易にし、C ++ 11とC ++ 03コードベースを統合するという点で、Boostには大きな役割があります。私は特に考えています
boost::result_of<>
および関連)たったの0.02ドル