ブーストラムダライブラリを使用してプログラミングを開始する最良の方法は何ですか.
3 に答える
C++ 言語とライブラリの境界内に留まり、最初に STL アルゴリズム関数テンプレートを使用したプログラミングに慣れることをお勧めします。boost::lambda の最も一般的な用途の 1 つは、ファンクター クラスをインライン化された式に置き換えることです。
ライブラリのドキュメント自体は、それが何のためにあるのかについての前もっての例を示しています。
for_each(a.begin(), a.end(), std::cout << _1 << ' ');
wherestd::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 プレースホルダーよりも魔法のように見えず、コード レビュー中に受け入れられやすくなります。最先端の C++ ショップでない限り、基本的な boost::lambda の使用を超えると、同僚から不満を抱かれる可能性が非常に高くなります。
船外に出ないようにしてください -ループが本当に正しい解決策である場合と場所があります。for
依存します。関数型プログラミングの概念にすでに精通していますか?そうでない場合は、関数型機能が固定された手続き型言語ではなく、関数型プログラミング用に設計された言語から始めることをお勧めします。機能的なスタイルでのコーディングに慣れていない場合(必ずしも難しいわけではありませんが、間違いなく異なります)、構文との戦いに多くの時間を費やし、物事を成し遂げるための学習に十分な時間を費やすことはありません。
どこから始めれば、Schemeで機能的な歯を切りましたが、良い選択肢はたくさんあります。
かなり最近のコンパイラを使用している場合は、boostを使用できます。まだマシンにない場合は、インストールします(sudo apt-get install libboost-dev on unbuntu、binaries from boost.org from Windows)。ドキュメントを読んでから、既存のコードを調べて、それらを使用する可能性のある状況を確認してください。たとえば、小さなコードで関数をパラメータ化した場合に排除できるコードの重複がたくさんありますか?