2011-06-19 16 views
2

私はQListを持っていて、すべての要素を並行して処理したいと思います。問題はmy_functionに引数を渡す必要があることです。以下のコードはこれを許可していません。QT、並行プログラミングと関数へのパラメータの渡し

QList<something> output = QtConcurrent::blockingMapped(
    input, 
    my_function 
); 

私は、パラメータのセットごとに異なる機能を使用することができます。私もグローバル変数を使用するかもしれません。私はQT関数でもビルドを書き直そうとするかもしれません。しかし、より良い解決策が必要です。何か案が?

答えて

4

関数に渡す引数が項目に依存しないと仮定すると、コンストラクタが渡す引数を持つstd::unary_function<const something&,void>を拡張するファンクタを作成できます。次に、ファンクションを使用するファンクタを使用します。たとえば、

struct MyFunctor : public std::unary_function<const something&,void> { 
public: 
    myFunctor(int s) { _i = i; } 
    void operator()(something& str) { 
    something.apply(_i); 
    } 
private: 
    int _i; 
}; 

… 

MyFunctor myFunctor(i); 
QList<something> output = QtConcurrent::blockingMapped(
    input, 
    myFunctor 
); 
1

関数にどのような引数を渡す必要がありますか?これを直接行うことはできません。あなたができることは、引数にアクセスできる定義済みのoperator()という別の構造体に引数を渡すことです。つまり、グローバル値を使用したくない場合です。

hereを見てください。

+0

整数(int)を渡したいとします。 – Michas

関連する問題