我如何像这样将向量传递给异步调用?
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
}
最佳答案
通过指定[=]
作为捕获列表,您已经在lambda中按值捕获了它。因此,在lambda正文中,您可以使用vectorofInts
引用该副本。如果要更明确,可以指定[vectorofInts]
。只是[=]
会自动捕获lambda使用的任何变量。
但是,除非lambda为mutable
,否则您将无法修改捕获的值。因此,向量被视为const
,而find
返回const_iterator
。如错误消息(在评论中发布)所述,您不能将iterator
转换为const_iterator
,因此请将变量类型更改为std::vector<int>::iterator
或auto
。
如果要访问向量本身,而不是副本,请通过指定[&]
或[&vectorofInts]
(如果要显式)以引用方式捕获。但是要小心,如果在这样的线程之间共享它,该怎么做,并确保在异步访问完成之前不要销毁它。
关于c++ - 如何将变量传递给std::async?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26865004/