async返回void类型的未来而不是期望的类型

时间:2016-03-03 00:55:12

标签: c++ c++11

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

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

1 个答案:

答案 0 :(得分:2)

您的lambda不返回任何内容(即ChangeDetectorRef),因此void的结果为async()。你想要的可能是

std::future<void>