質問
最近、VC2010でのラムダのサポートに非常に興奮しています。私はゆっくりと、この機能がC ++をより良いものに変換する上で持つ可能性を完全に把握し始めています。
しかし、この可能性は、boostやQTなどの日々のライブラリのラムダのメインストリームサポートに大きく依存していることに気付きました。
これらのライブラリをC ++ 0xの新機能で拡張する計画があるかどうかは誰にもわかりますか?
lambdasは、boost :: lambdaおよびそれと相互作用するboostのすべての必要性を実質的に置き換えます。
QTは、すべてのコンテナでラムダのサポートを追加でき、おそらく SLOT
s
解決
ラムダは、既存のライブラリに既に非常によく適合しています-テンプレートパラメータで指定されたタイプの関数オブジェクトを関数が受け入れる場所であればどこでも。
これは、それらのすばらしい点の1つです。これらは、既存のプラクティスを洗練された構文で体系化する言語機能の典型的な例です。
明らかにブーストラムダライブラリは冗長になりますが、これは新しい機能を追加する必要がないことを意味します。
他のヒント
ラムダの使用がライブラリによるサポートにどのように依存するかわかりません。ラムダを使用すると、さまざまな小さなアルゴリズムをラップするだけで他の言語/ライブラリ機能とうまく適合するように多くのクラスを作成する必要がなくなります( std :: function
が思い浮かびます)。関数オブジェクトまたは関数ポインターのいずれかを渡すのに使用した場所であれば、ラムダも使用できます。
したがって、主に既存のコードとライブラリを使用するための別の代替手段を追加します。ライブラリがラムダをよりよくサポートできる唯一の方法は、より機能的なスタイルのアプローチを使用することです。
このようなライブラリは、関連するC ++ 0x機能に対する適切なコンパイラサポートがあるまで待機する可能性があり、メインストリームコンパイラがサポートするまでそれほど気にしません。息を止めないでください。
ほとんどのライブラリは、コールバックに標準の関数ポインターを使用します。 C ++ 0xラムダは関数ポインターとして使用できるため、ほとんどのライブラリを変更する必要はありません。他のライブラリはテンプレートを使用して、呼び出し可能なオブジェクトを取得できるようにします(たとえば、 std :: foreach
を変更する必要はありません)。
ライブラリが変更される可能性があると考えることができる他の唯一のC ++ 0x機能は、強く型付けされた enums
を使用することです。また、ライブラリはコンパイル時間を短縮するために extern
テンプレートの使用を開始する場合があります。