gpt4 book ai didi

c++ - std::future 作为函数 C++ 的参数

转载 作者:IT老高 更新时间:2023-10-28 23:13:36 33 4
gpt4 key购买 nike

考虑下面的代码

void printPromised(std::future<int> f)
{
std::cout << f.get() << std::endl;
}

int main()
{
printPromised(std::async(std::launch::async, [](){ return 8; })); // This works

auto f = std::async(std::launch::async, [](){ return 8; });
printPromised(f); // This won't work
}

它说“这是一个已删除的功能”。这是为什么?此外,我需要将 std::async 生成的相同 promise 结果传递(共享)给多个用户。这意味着当有人调用 get() 函数时,我需要传递相同的结果(如果它已经生成,我不需要使用 std::async 重新生成结果)而且我需要 std::future::get 拥有的阻塞机制。

最佳答案

只有一个 future 。您不能拥有同一个 future 的多个拷贝。所以你需要将 future 的所有权转让给函数:

printPromised(std::move(f));
// ^^^^^^^^^^^^

如果你真的需要对 future 的共享访问,你可以通过调用 share() 成员函数从普通的 future 构造一个 shared_future; this 的行为类似于共享指针:

auto sf = std::async(std::launch::async, [](){ return 8; }).share();

现在 sf 可以被复制,所有拷贝都等待相同的结果,即所有拷贝上的 wait() 调用可能会阻塞并将与生成同步 -准备好结果了。

关于c++ - std::future 作为函数 C++ 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27186233/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com