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

 青樽有酒_585_587 发布于 2022-12-09 12:37

考虑以下代码

void printPromised(std::future 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生成的相同承诺结果; 给多个用户.这意味着当有人调用"getter"时,我需要传递相同的结果(std::async如果已经生成了,我不需要重新生成结果)并且我还需要具有的阻塞机制std::future::get.

1 个回答
  • 只有一个未来.你不能拥有同一个未来的多个副本.因此,您需要将未来的所有权转移到该功能:

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

    如果你真的需要共享访问未来,你可以shared_future通过调用share()成员函数来构建一个普通的未来; 这与共享指针的行为类似:

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

    现在sf可以复制,并且所有副本都等待相同的结果,即wait()所有副本上的调用可能会阻塞,并将与结果的准备就绪同步.

    2022-12-11 03:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有