use*_*317 17 c++ lambda multithreading c++11
我在使用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();
Run Code Online (Sandbox Code Playgroud)
不幸的是,编译器给了我:
/usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<TheMethod...
Run Code Online (Sandbox Code Playgroud)
我在lambda定义中尝试了很多组合,并且调用了std :: thread构造函数,但是我总是得到相同的错误.包含了线程库,我也链接了pthread.
谢谢你的提示!
ale*_*xk7 22
您可以使用std :: ref通过引用传递参数:
std::thread t1(functor, std::ref(cursor), std::ref(a))
Run Code Online (Sandbox Code Playgroud)
您还可以通过lambda本身中的引用捕获参数:
size_t a;
Cursor cursor = someCursor();
std::thread t1([&] {a = classMethod(cursor);});
t1.join();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30198 次 |
| 最近记录: |