【发布时间】:2016-03-03 00:55:12
【问题描述】:
我正在学习 C++ 的期货和异步编程。我有以下代码基于 Stroustrup 的 C++ 参考第 42 章中的代码。 GCC 和 Microsoft 编译器都抱怨在对 push_back 的调用中没有从 future<void> 到 future<InputIterator> 的转换。为什么对 async 的调用会返回 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
【问题讨论】: