3

関数を並列で使用する方法をほとんど知りませんでした。次のコード行は、インデックスの二乗値を計算し、そのインデックスに配列(四角形)を配置します。 parallel_for関数は、ヘッダーの下の並行処理名前空間の一部としてVisual Studio 2010で使用できます。parallel_forでの関数オブジェクトの使用

parallel_for(static_cast<size_t>(0), count, 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); }); 

ラムダ式を使用して2乗を並列に計算することがわかります。このコードは正常に動作し、正しくコンパイルされます。ただし、ラムダ式はparallel_for関数をコードでクラッタします。私は、例えば、単に関数オブジェクト内ラムダ式を定義することを考えていた:私はparallel_forの関数内で、この関数(四角)を使用する方法

function<void(size_t)> Squares = 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); }; 

私の質問はありますか?正方形関数を正しく書いていないのですか、これはラムダ式を使うためのparallel_forの単なるパラダイムですか?あなたは先に進み、他のいくつかの並列ライブラリをマイクロソフト以外の私に勧めてもらえますが、私の質問に対する答えを知りたいと思っています。

+0

@Steveラムダ式が必要な場所にSquares()関数を配置するだけで、VS10はエラーを取り上げてコンパイルしません。 – sj755

答えて

3

ラムダ式は、対応する関数オブジェクトの匿名バージョンと考えることができます。あなたの例では

は、あなたのファンクタは以下のように、うまく動作します:MSDN docsから

parallel_for(static_cast<size_t>(0), count, Squares); 

ラムダ式は、匿名 機能に関連しているプログラミング 技術です。無名関数は の本体を持ちますが、 には名前がありません。ラムダ式 は、暗黙的に関数オブジェクト クラスを定義し、そのクラスタイプの関数オブジェクト を構築します。

0

MSFTを構成するすべての例では、ラムダを直接使用しています。

関連する問題