これらの異なるバインド アプローチの違いを理解しようとしています。boost::bind および boost::phoenix::bindにも同様の質問があります
しかし、誰かがこれを例で説明できれば、それは素晴らしいことです。また、boost::phoenix が boost::bind、booost::lambda ライブラリのスーパーセットであることは本当ですか?
これらの異なるバインド アプローチの違いを理解しようとしています。boost::bind および boost::phoenix::bindにも同様の質問があります
しかし、誰かがこれを例で説明できれば、それは素晴らしいことです。また、boost::phoenix が boost::bind、booost::lambda ライブラリのスーパーセットであることは本当ですか?
ストーリーは(私はストーリー全体を伝えるのに十分な年齢ではありませんが)、C++98で使いにくいbind1st/bind2ndを置き換えるために最初に作成され、その目標を達成し、現在はC++11の一部です。しかし、過去10年間でC ++の関数型プログラミングスタイルが台頭したように、boost :: lambdaは、C ++の純粋なライブラリアプローチでかなり幅広い関数型構造のセットをサポートするように(作成時に)それをプッシュします。
そして、ニュースグループから知っているように、boost::lambdaとboost::phoenixの作者は、実質的に同じ問題を扱っているため、2つのライブラリを組み合わせようとします。私はそれが美しくデザインされたブーストだったと思います::phoenix2
そして、ブースト:: protoがあります。これは、式テンプレートを作成するためのライブラリです。または、メタライブラリだと思います。したがって、フェニックスニルヴァーナは、boost :: protoで生まれ変わり、phoenix3が表示されます。phoenix3は上記の中で最も強力だと思います。
一方、C ++ 11は、ラムダ式の言語サポートを追加します。これは、個人的に非常に便利で便利だと思います。唯一の欠点は、ポリモーフィックではないことです(phoenix3ではポリモーフィック関数オブジェクトを作成できます)。
私が個人的な経験を持っているという結論として、C ++ 11ラムダ式は、可能であれば、日常業務の選択肢です。便利で、明確で、コンパイル時に使いやすいです。Phoenix3はポリモフィックで、非常に強力で、非常にクールですが、コンパイル時間が長いという欠点があります。
しかし、誰かがこれを例で説明できれば、それは素晴らしいことです。
何の例?それらは同じ概念の異なる実装です。
実際に重要なのは次のとおりです。
boost::lambda::bind
それと同時に)、Boost.Lambda は公式に非推奨になりました。boost::bind
に置き換えられる予定です。boost::phoenix::bind
まだ置き換えられていない唯一の理由はboost::bind
、Boost.Phoenix は厳密に C++03 準拠のコンパイラを必要とするのに対し、MSVC6 などの古い (壊れている) コンパイラをサポートしている/回避策があるためです。これら 2 つの事実を組み合わせると、新しいコードで使用する唯一の真の候補はboost::phoenix::bind
.
また、boost::phoenix が boost::bind、booost::lambda ライブラリのスーパーセットであることは本当ですか?
はい、これは正しいです。