2012-04-28 5 views
1

私はParallel Pattern Libraryを使用しています。結合可能なクラスは、openMPのreduce節の役割を果たし、並列計算の結果をマージすることを可能にします。C++ PPLパラレル作業 - ファンクションmaxim(縮退クラス 'combinable')

.combine(max())はありますか(btw、結合で許可された操作でいくつかの参照をポイントできますか、見つからなかったでしょうか?

ありがとうございます。

combineable<T> max; 

// .. do processing 

max.combine(std::max<T>); 

あなたはすべての公式を見つけることができます:

答えて

1

はい、あなたが渡すことができstd::maxcombineable::combineに、あなたが述語としてテンプレート関数を渡すときに考慮に入れる必要があり一つのことは、明示的タイプに名前を付ける必要があるということですMSDNドキュメントcombine(と他のすべてのPPLのもの)hereについて。

+0

しかし、私はここでなぜmaxcombine(std :: max ())ではなく、 'max.combine(std :: max );'(これはコンパイルしています) ; 'と書かれていますが、docではplusの構文は' .combine(プラス()) 'です(それをコンパイルしています)? – octoback

+0

@dlib 'std :: max 'は関数述語なので、関数の名前を指定するだけです。中括弧は必要ありません。 'std :: plus 'はオーバーロードされた 'operator()'を持つクラスです。あなたが 'std :: plus ()'と言うときにしていることは、その型の一時クラスを作成していることです() 'は結合によって使用されます。 – inf