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

标签 c++ multithreading c++11 lambda

我在使用 std::thread 和 lambdas 时遇到了一些麻烦。我有一个 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++ - 将 lambdas 传递给 std::thread 并调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332181/

相关文章:

c++ opengl我如何制作着色器文件并在主cpp中使用它

c++ - 如果 volatile 是不必要的,为什么 std::atomic 方法提供 volatile 重载?

C++显示在txt文件中找到的唯一日期及其相关价格

c++ - 如何调整结构的二维 vector 的大小

java - 尝试使用 JNI 组件启动 Android + OpenCV 文件时出现令人困惑的 UnsatisfiedLinkError

c++ - 添加库时出现 Qt 错误 - 没有创建目标的规则

java - 将 String 转换为泛型类型 <T extends Comparable<T>>

objective-c - 有没有办法检查是否获得了 NSLock?

javascript - 在集群模式下将 pm2 与 node.js 一起使用是否安全

c++ - 我应该尽量使用 const T & 吗?