gpt4 book ai didi

c++ - 从中间 future 创造 future ?

转载 作者:可可西里 更新时间:2023-11-01 15:45:41 33 4
gpt4 key购买 nike

在下面的示例代码中,我想创建一个 Item来自 Component 的对象:

struct Component { };

struct Item {
explicit Item(Component component) : comp(component) {}
Component comp;
};

struct Factory {
static std::future<Item> get_item() {
std::future<Component> component = get_component();
// how to get a std::future<Item> ?
}

std::future<Component> get_component();
};

我如何从 std::future<Component> 开始至 std::future<Item>


更新:从问题中删除了我的第一个想法(基于线程)并发布了一个答案。

最佳答案

需要 moar packaged_tasks!

std::future<Item> get_item() {
std::packaged_task<Item()> task([]{
return Item(get_component().get());
});
auto future = task.get_future();
std::thread(std::move(task)).detach();
return future;
};

一般来说,我建议忘记 promises 并首先考虑 packaged_tasks。 packaged_task 负责为您维护一个(函数、 promise 、 future )三元组。它允许您以自然的方式编写函数(即返回和抛出等),并将异常正确传播到您的示例忽略的 future (任何线程中未处理的异常std::terminate 你的程序!)。

关于c++ - 从中间 future 创造 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877007/

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