首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有成员函数的QtConcurrent

带有成员函数的QtConcurrent
EN

Stack Overflow用户
提问于 2012-04-03 23:13:25
回答 1查看 15.8K关注 0票数 5

我创建了一个QFuture,我想用它来并行化对成员函数的调用。更准确地说,我有一个包含.h的solveParallel类:

代码语言:javascript
复制
class solverParallel {
public:
  solverParallelData(Manager* mgr_);
  virtual ~solverParallel(void);

  void runCompute(solveModel * model_);

  bool resultComput();

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

其中方法runCompute()创建myFutureCompute成员。.cpp看起来像

代码语言:javascript
复制
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();
}

包含所有内容都是正确的。编译失败,联机

代码语言:javascript
复制
futureComput = QtConcurrent::run(&this->myMgr,&Manager::compute(model));

出现以下错误:

代码语言:javascript
复制
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

此外,同一行代码中'&Manager‘的鼠标信息为: Error:非静态成员引用必须相对于特定对象。

你看到诀窍在哪里了吗?谢谢并致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-03 23:24:45

official documentation中:

QtConcurrent::run()也接受指向成员函数的指针。第一个参数必须是常量引用或指向类实例的指针。通过常量引用传递在调用常量成员函数时很有用;通过指针传递在调用修改实例的非常数成员函数时很有用。

您正在传递一个指向指针的指针。还要注意,您不能像传递参数那样传递参数,而是作为run函数中的额外参数。下面的代码应该可以工作:

代码语言:javascript
复制
futureComput = QtConcurrent::run(this->myMgr,&Manager::compute, model);
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9996253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档