如何将变量传递给std :: async?

时间:2014-11-11 12:31:43

标签: 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 
}

1 个答案:

答案 0 :(得分:6)

您已经通过将[=]指定为捕获列表,已经通过lambda中的值捕获它。因此,在lambda体内,您可以使用vectorofInts来引用该副本。如果您想要更明确,可以指定[vectorofInts];只有[=]会自动捕获lambda使用的任何变量。

但是,除非lambda为mutable,否则您无法修改捕获的值。因此,向量被视为constfind返回const_iterator。正如错误消息(在评论中发布)所示,您无法将iterator转换为const_iterator,因此请将您的变量类型更改为std::vector<int>::iteratorauto。< / p>

如果要访问矢量本身而不是副本,则通过指定[&][&vectorofInts]进行捕获,如果您想要显式的话。但是如果你在这样的线程之间共享它,请小心你用它做什么,并确保在异步访问完成之前不要销毁它。