我正在学习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
答案 0 :(得分:2)
您的lambda不返回任何内容(即ChangeDetectorRef
),因此void
的结果为async()
。你想要的可能是
std::future<void>