异步返回 void 类型的未来,而不是预期类型

async returns future of void type instead of expected type

本文关键字:类型 未来 返回 void 异步      更新时间:2023-10-16

我正在学习C++的未来和异步编程。我有以下代码基于Stroustrup C++参考的第42章。GCC 和 Microsoft 编译器都抱怨在调用 push_back 时没有从 future<void>future<InputIterator> 的转换。为什么对异步的调用返回future<void>而不是我期望从std::find获得的future<std::iterator>

template<typename T, typename InputIter>
InputIter p_find(InputIter first, InputIter last, const T& value, const int grain)
{
    std::vector<std::future<InputIter>> results;
    while (first != last)
    {
        results.push_back(std::async([=]() mutable {std::find(first, first + grain, value); }));
        first += grain;
    }
    //blah blah

你的lambda不返回任何内容(即void),所以async()的结果是std::future<void>。你想要的可能是

results.push_back(std::async([=]() mutable {return std::find(first, first + grain, value); }));
//                                          ^^^^^^