質問

最近、VC2010でのラムダのサポートに非常に興奮しています。私はゆっくりと、この機能がC ++をより良いものに変換する上で持つ可能性を完全に把握し始めています。

しかし、この可能性は、boostやQTなどの日々のライブラリのラムダのメインストリームサポートに大きく依存していることに気付きました。
これらのライブラリをC ++ 0xの新機能で拡張する計画があるかどうかは誰にもわかりますか?

lambdasは、boost :: lambdaおよびそれと相互作用するboostのすべての必要性を実質的に置き換えます。 QTは、すべてのコンテナでラムダのサポートを追加でき、おそらく SLOT s

を定義する代替方法としても追加できます
役に立ちましたか?

解決

ラムダは、既存のライブラリに既に非常によく適合しています-テンプレートパラメータで指定されたタイプの関数オブジェクトを関数が受け入れる場所であればどこでも。

これは、それらのすばらしい点の1つです。これらは、既存のプラクティスを洗練された構文で体系化する言語機能の典型的な例です。

明らかにブーストラムダライブラリは冗長になりますが、これは新しい機能を追加する必要がないことを意味します。

他のヒント

ラムダの使用がライブラリによるサポートにどのように依存するかわかりません。ラムダを使用すると、さまざまな小さなアルゴリズムをラップするだけで他の言語/ライブラリ機能とうまく適合するように多くのクラスを作成する必要がなくなります( std :: function が思い浮かびます)。関数オブジェクトまたは関数ポインターのいずれかを渡すのに使用した場所であれば、ラムダも使用できます。

したがって、主に既存のコードとライブラリを使用するための別の代替手段を追加します。ライブラリがラムダをよりよくサポートできる唯一の方法は、より機能的なスタイルのアプローチを使用することです。

このようなライブラリは、関連するC ++ 0x機能に対する適切なコンパイラサポートがあるまで待機する可能性があり、メインストリームコンパイラがサポートするまでそれほど気にしません。息を止めないでください。

これは正しくありません。boost:: lambdaをC ++ 0x lambdaに置き換えることはできません。一部については、こちらをご覧ください。理由(ブーストバインドについてですが、ほとんどは転送されると思います)

また、@ daniel this は、ラムダ関数/スロットのブーストバインドの使用を開始するのに役立つ場合があります。それは私の人生を信じられないほど簡単にします。

さらに、ソースからの@litb、ラムダは変更されません(argh)

ほとんどのライブラリは、コールバックに標準の関数ポインターを使用します。 C ++ 0xラムダは関数ポインターとして使用できるため、ほとんどのライブラリを変更する必要はありません。他のライブラリはテンプレートを使用して、呼び出し可能なオブジェクトを取得できるようにします(たとえば、 std :: foreach を変更する必要はありません)。

ライブラリが変更される可能性があると考えることができる他の唯一のC ++ 0x機能は、強く型付けされた enums を使用することです。また、ライブラリはコンパイル時間を短縮するために extern テンプレートの使用を開始する場合があります。

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