从std :: future <void>转换为非标量std :: future <bool>引发的错误

时间:2018-06-01 15:06:50

标签: c++ c++11 c++14

方法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

2 个答案:

答案 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>