异步返回 void 类型的未来,而不是预期类型
async returns future of void type instead of expected type
我正在学习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); }));
// ^^^^^^
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在Linux中哪里可以找到互斥、未来等的源代码
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 异步返回 void 类型的未来,而不是预期类型