Преобразование из std :: future <void>в нескалярный std :: future <bool>повышенная ошибка - PullRequest
0 голосов
/ 01 июня 2018

Метод 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 голосов
/ 01 июня 2018

Проблема в том, что вам нужно на самом деле вернуть значение из лямбды, чтобы функция имела тип возвращаемого значения.Поскольку вы не делаете этого, тип возврата std::async равен std::future<void>.

std::async([&]{ return Internal::validate(request, id); }); приведет к std::future<bool>

0 голосов
/ 01 июня 2018

Измените

std::future<bool> task_1 = std::async([&]{ Internal::validate(request, id); });

на

std::future<bool> task_1 = std::async([&]{ return Internal::validate(request, id); });

ваша лямбда не вернула bool;поэтому он не может использоваться в качестве будущего источника bool.

Если validate не возвращает bool, это должен быть future<void>.

...