我如何像这样将向量传递给异步调用?

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>::iteratorauto

如果要访问向量本身,而不是副本,请通过指定[&][&vectorofInts](如果要显式)以引用方式捕获。但是要小心,如果在这样的线程之间共享它,该怎么做,并确保在异步访问完成之前不要销毁它。

关于c++ - 如何将变量传递给std::async?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26865004/

10-11 15:12