2012-04-03 12 views
5

メンバ関数への呼び出しを並列化するために使用するQFutureを作成します。より正確には、私は.HとクラスsolveParallelを有する:MethodeのrunCompute()はmyFutureCompute部材を作成しているメンバ関数を持つQtConcurrent

class solverParallel { 
public: 
    solverParallelData(Manager* mgr_); 
    virtual ~solverParallel(void); 

    void runCompute(solveModel * model_); 

    bool resultComput(); 

private: 
    Manager *myMgr; 
    QFuture<bool> myFutureCompute; 
}; 

。 .cppは次のようになります

solveParallel::solveParallel(Manager* mgr_) 
:m_mgr(mgr_) 
{ 
} 

solverParallel::~solverParallel(void){} 

void solverParallel::runCompute(solveModel* model) 
{ 
    futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model)); 
} 

bool solverParallelData::resultComput() 
{ 
    return m_futureComput.result(); 
} 

これはすべて問題ありません。コンパイルは、このエラーのある行

futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model)); 

に、失敗します。

Error 44 error C2784: 'QFuture<T> QtConcurrent::run(T (__cdecl *)(Param1),const  Arg1 &)' : could not deduce template argument for 'T (__cdecl *) (Param1)' from 'Manager **' solverparallel.cpp 31 

また、コードの同じ行の「&マネージャ」のマウス情報の上に立つ:エラー:非静的メンバ参照は相対的でなければなりません特定のオブジェクトに

トリックはどこにありますか?ありがとうございました。 official documentationから

答えて

14

QtConcurrent::run() also accepts pointers to member functions. The first argument must be either a const reference or a pointer to an instance of the class. Passing by const reference is useful when calling const member functions; passing by pointer is useful for calling non-const member functions that modify the instance.

あなたは、ポインタへのポインタをpossingています。また、引数を渡すことはできませんが、run関数の余分な引数として渡してください。次のように動作します:

futureComput = QtConcurrent::run(this->myMgr,&Manager::compute, model); 
関連する問題