方法validate(std::string& request, int& id)
返回bool
。
当我使用这种语法时,编译结束:
auto task_1 = std::async([&]{ validate(request, id); });
但是,当我使用std::future<bool>
时,编译失败:
std::future<bool> task_1 = std::async([&]{ Internal::validate(request, id); });
错误是:
错误:从“
std::future<void>
”转换为非标量类型 'std::future<bool>
'要求
这里有什么问题?我想检查一下:
task_1.get() == true
答案 0 :(得分:5)
更改
std::future<bool> task_1 = std::async([&]{ Internal::validate(request, id); });
到
std::future<bool> task_1 = std::async([&]{ return Internal::validate(request, id); });
你的lambda没有返回bool
;所以它不能用作bool
的未来来源。
如果validate
未返回bool
,则应为future<void>
。
答案 1 :(得分:4)
问题是你需要实际从lambda返回一个值,使函数具有返回类型。由于您没有这样做,std::async
的返回类型为std::future<void>
。
std::async([&]{ return Internal::validate(request, id); });
会产生std::future<bool>