You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::future<void>转std::future<bool>编译失败,求原因及解决方法

问题分析与解决:std::future编译失败的原因

嗨,这个问题的核心其实很简单——你的lambda表达式没有返回validate函数的结果!

咱们来拆解一下:

  • 当你用auto task_1 = std::async([&]{ validate(request, id); });时,编译器会自动推断lambda的返回类型为void(因为你只是调用了函数,没把结果return出去),所以std::async返回的是std::future<void>,auto刚好匹配类型,所以编译能通过。但这时候你调用task_1.get()是拿不到validate的返回值的,相当于白执行了这个函数。
  • 当你显式声明std::future<bool> task_1时,编译器就会报错,因为它收到的是std::future<void>,没法转换成std::future<bool>,这就是你看到的error: conversion from ‘std::future<void>’ to non-scalar type ‘std::future<bool>’ requested的原因。

解决方法

只需要在lambda里加上return,把validate的返回值传递出去就行:

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

这样lambda的返回类型会被正确推断为bool,std::async也就会返回std::future<bool>,之后你就能正常执行task_1.get() == true来验证结果了。

内容的提问来源于stack exchange,提问作者cateof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:01:45