Har*_*Boy 0 c++ c++11 stdasync
我怎样才能将向量传递给异步调用?
std::vector<int> vectorofInts;
vectorofInts.push_back(1);
vectorofInts.push_back(2);
vectorofInts.push_back(3);
std::async([=]
{
//I want to access the vector in here, how do I pass it in
std::vector<int>::iterator position = std::find(vectorofInts.begin(), vectorofInts.end(), 2);
//Do something
}
Run Code Online (Sandbox Code Playgroud)
您已经通过指定[=]为捕获列表,通过lambda中的值捕获它.因此,在lambda体内,您可以使用它vectorofInts来引用该副本.您可以指定[vectorofInts]是否要更明确; 只会[=]自动捕获lambda使用的任何变量.
但是,除非lambda是,否则无法修改捕获的值mutable.所以向量被视为const,并find返回一个const_iterator.由于错误消息(在评论中发布)说,您无法转换iterator为const_iterator,因此将您的变量类型更改为std::vector<int>::iterator或auto.
如果要访问向量本身而不是副本,则通过指定[&]或通过引用进行捕获,或者[&vectorofInts]是否要显式.但是如果你在这样的线程之间共享它,请小心你用它做什么,并确保在异步访问完成之前不要销毁它.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |