20

たとえば、boost::functionほぼ完全に に移動std::functionします。boost::shared_ptr

しかし、私は見つけることができませんstd::anyか?なんらかの理由で名前が変更されたのか、それとも新しい標準にまったく配置されなかったのか?

4

4 に答える 4

18

質問があったので、 C++14 標準から投票されたオプション機能として std::experimental::any に進みました。

その後、少なくとも GCC 5.1 で実装されました。

その後、この機能は C++17 で標準化され、std::anyになりました。C++17 のstd::variantも参照してください。タイプ セーフな共用体は、限定された既知の型の代替のいずれかを保持するか、空です (ヒントについては remy-lebeau に感謝します)。

于 2015-06-09T16:46:02.550 に答える
16

boost のすべてのライブラリが標準に組み込まれているわけではありません (コンポーネントが削除されているものでも)。一般に、委員会は標準ライブラリへの追加に関してはかなり保守的です (なぜなら、組み込みが間違っていた場合 (たとえば、より良い代替手段があるため) 後で何かを削除することはほとんど不可能だからです)。

boost::functionそしてboost::shared_ptr、それらはすでにtr1. boost::any一方、カットを行いませんでした。ただし、後で標準ライブラリに含まれる可能性があります (たとえば、次のテクニカル レポートでは、こちらを参照してください)。あると便利ですがboost::any、例ほど重要であるとは評価しませんshared_ptr

結論:boost::any委員会はそれを含める差し迫った必要性を見ていないので、C++ 11の一部ではありません

于 2012-02-08T14:43:52.257 に答える
3

デフォルトの立場は、ライブラリが含まれるように提出され、委員会を通過しない限り、ライブラリは新しい標準に含まれないというものだったと思います。

boost::any が提出されたかどうかはわかりません。おそらくそうではありません。ただし、boost::any は引き続き使用できます。

私の推測では、C++11 ではブースト ライブラリが書き直され、一部は冗長と見なされ、他のものはムーブ セマンティクス、初期化子リスト、および自動を使用するように変更され、C++11 機能を備えた C++11 スタイルで記述されます。

ほとんどの場合、新しいライブラリはすべて C++11 になりますが、多くのライブラリはまだ C++11 コンパイラに切り替えていないため、既存のブースト パッケージはしばらくの間利用できるように維持されます。また、すべての主要なコンパイラによって実装されている C++11 の機能のみが最初にパッケージに組み込まれると思います。

これはおそらく、stackoverflow よりもプログラマーにとっての質問であり、comp.std.c++.moderated および boost メーリング リストにとってはさらに良いことです。

于 2012-02-08T14:48:11.233 に答える