c++ - 将 lambda 传递给 std::thread 并调用类方法

标签 c++ multithreading c++11 lambda

我在将 std::thread 与 lambda 一起使用时遇到了一些麻烦。我有一个方法 TheMethod,我应该在其中使用 std::thread 来并行化对同一类中的方法的一些函数调用。

我定义了一个 lambda 函数,并尝试按如下方式将它传递给我创建的 std::thread 实例:

auto functor = 
   [this](const Cursor& c, size_t& result) ->void {result = classMethod(c);};

size_t a;
Cursor cursor = someCursor();

std::thread t1(functor, cursor, a);

t1.join();

不幸的是,编译器给我:

  /usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<TheMethod...

我在 lambda 定义和调用 std::thread 构造函数的方式中尝试了很多组合,但我总是得到同样的错误。包含线程库,我也链接了 pthread。

感谢提示!

最佳答案

您可以使用 std::ref 通过引用传递参数:

std::thread t1(functor, std::ref(cursor), std::ref(a))

您还可以在 lambda 本身中通过引用捕获参数:

size_t a;
Cursor cursor = someCursor();
std::thread t1([&] {a = classMethod(cursor);});
t1.join();

关于c++ - 将 lambda 传递给 std::thread 并调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339845/

相关文章:

c++ - 错误 : no matching function for call to [. ..] 注意:模板参数推导/替换失败

c++ - 您可以将操纵器传递给函数吗?

java - Nashorn 中的评估函数是否可从不同线程重用?

ios - 等待异步执行的 block 的iOS(或RubyMotion)惯用法是什么?

c++ - std::priority_queue 中的比较器

c++ - 如何在没有任何输入指示终止的情况下摆脱这个 "loop"?

c++ - g++ 帮助链接本地拷贝

c++ - 嵌套并行 for 循环 : "Parallel outer for loop" in "parallel inner for loop as a function"

c++ - std::future 什么时候执行?

c++ - 我的枚举不是类或命名空间