8

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

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

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

4

5 に答える 5

6

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

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

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

于 2009-08-03T17:20:38.183 に答える
4

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

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

于 2009-08-03T17:27:51.510 に答える
3

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

于 2009-08-03T17:09:03.763 に答える
1

This is NOT true, you cannot replace boost::lambda with C++0x lambda. See here for some reasons (about boost bind, but I think most of it transfers)

Also, @daniel this might help you get started using lambda functions/boost bind for slots. It makes my life incredibly easy.

Additionally, @litb from my sources, lambdas are not going to be changed (argh)

于 2009-08-03T21:28:25.360 に答える
0

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

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

于 2009-08-03T17:30:37.133 に答える