質問

ブースト ラムダ ライブラリを使用してプログラミングを始める最良の方法は何でしょうか。

役に立ちましたか?

解決

C++ 言語とライブラリの境界内に留まり、最初に STL アルゴリズム関数テンプレートを使用したプログラミングに慣れることをお勧めします。boost::lambda の最も一般的な用途の 1 つは、ファンクター クラスをインライン化された式に置き換えることです。

ライブラリのドキュメント自体には、それが何のために存在するのかについての最初の例が示されています。

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

どこ std::cout << _1 << ' ' 呼び出されると最初の引数を cout ストリーム。これはカスタム ファンクター クラスを使用して行うことができます。 std::ostream_iterator または明示的なループを使用することもできますが、少なくとも関数型プログラミングの概念に慣れている場合には、簡潔さとおそらく明確さの点で boost::lambda の方が優れています。

STL を(過剰に)使用すると、boost::bind と boost::lambda に引き寄せられるようになります。次のような場合に非常に便利です。

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

そこに至るまでは、それほどではありません。したがって、STL アルゴリズムを使用し、独自のファンクターを作成し、boost::lambda を使用してインライン式に変換します。

専門的な観点から、boost::lambda を使い始める最良の方法は、boost::bind の使用法を理解して受け入れてもらうことだと信じています。boost::bind 式でのプレースホルダーの使用は、「裸の」boost::lambda プレースホルダーよりもはるかに魔法的ではなく、コード レビュー中に受け入れられやすくなります。基本的な boost::lambda の使い方を超えた使い方をすると、最先端の C++ ショップにいる場合を除き、同僚から不満を抱かれる可能性が非常に高いです。

行き過ぎないようにしてください - そこで いつ、どこで for-ループ 本当に が正しい解決策です。

他のヒント

場合によります。関数型プログラミングの概念にはすでに精通していますか?そうでない場合は、関数型機能が固定された手続き型言語ではなく、関数型プログラミング用に設計された言語から始めることをお勧めします。関数型スタイルでのコーディングに慣れていない場合 (そうではありません) もっと強く 必然ですが、それは明らかに異なります)、その場合、構文と格闘することに多くの時間を費やし、物事を成し遂げるための学習に十分な時間が足りなくなります。

どこから始めればよいかというと、私は Scheme について本格的に勉強しましたが、良い選択肢はたくさんあります。

かなり新しいコンパイラを使用している場合は、ブーストを使用できます。まだマシン上にない場合は、インストールします (unbuntu の場合は sudo apt-get install libboost-dev、Windows の場合は boost.org からバイナリを取得します)。読む 博士次に、既存のコードを調べて、それらを使用する可能性のある状況を確認します。たとえば、小さなコードで関数をパラメータ化すれば排除できるコードの重複がたくさんありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top