如何将Lambda引用到std :: function <void()>

时间:2015-07-07 12:55:35

标签: c++11 lambda threadpool

我建立一个线程池以提高我的raycaster性能。

因此我的线程池有一个作业队列:

std::vector<std::function<void()>> jobs;

和一个向线程池添加作业的公共函数。

void ThreadPool::executeJob(std::function<void()> job)
{
  std::unique_lock<std::mutex> lockJobs(this->lockJobs);
  this->jobs.push_back(job);
}

我现在想要引用线程池的唯一功能如下:

void MeshScene::CastRays(const Ray& ray, const int rayCount, const MatrixF& rot, 
                         std::vector<IntersectionResult>& rayCollection)
{
    // perform raycasts...
    rayCollection.push_back(intersectionResult);
  }
}

rayCollection是我称之为executeJob(std::function<void()> job)函数的类的成员。

现在我尝试用lambda引用它

threadPool.executeJob([ray, rayCount, rotation, this] () { CastRays(ray, rayCount, rotation, std::ref(this->testIntersectionCollection)); });

我得到了令人困惑的错误,我认为我的lamdba表达没有意义。有什么想法吗?

或者有人知道更好的解决方案,而不是用std :: function收集工作吗?

1 个答案:

答案 0 :(得分:0)

很抱歉我的回复丢失了。我想出了一个解决方案,但忘了发布它。但这是我如何做到的:

Threadpool功能:

void executeJob(std::function<void()> job);

要致电的功能:

void CastRays(std::vector<Result>* resultCollection)

来自Threadpool的调用:

threadPool.executeJob([this] () { CastRays(&this->intersectionCollectionOne); });