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

如何创建已解析的std::future?(C++20环境)

如何在C++20中创建已解析的std::future

在C++20中,std::future没有直接接收值的构造函数,要创建携带就绪结果的std::future,可以通过以下两种方式实现:

方法一:使用std::promise(推荐)

通过std::promise桥接结果与std::future,这是最直接的实现方式:

  1. 创建std::promise<int>对象,负责管理结果状态
  2. 调用set_value将缓存结果传入,此时对应的future会变为就绪状态
  3. 通过get_future()获取绑定好的std::future并返回

修改后的代码示例:

// Class declarations shortened to minimal example to communicate intent
class MyClass {
    Cache m_cache;

    std::future<int> foo(int arg);
};

class Cache {
public:
    std::optional<int> get(int arg);
};

std::future<int> MyClass::foo(int arg) {
    if (auto res = m_cache.get(arg)) {
        std::promise<int> p;
        p.set_value(*res);
        return p.get_future();
    }
    // 缓存未命中时执行计算逻辑
    return std::async(std::launch::async, [arg]() {
        // 此处替换为实际计算逻辑
        return arg * 2;
    });
}

方法二:使用std::async的deferred策略

利用延迟执行特性,创建一个立即返回结果的future:

if (auto res = m_cache.get(arg)) {
    return std::async(std::launch::deferred, [val = *res]() { return val; });
}

这种方式的底层会多一层lambda调用开销,适合简单场景,而std::promise是更高效直接的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:49:52