c – 从中​​期期货创造未来?

前端之家收集整理的这篇文章主要介绍了c – 从中​​期期货创造未来?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的示例代码中,我想从一个组件创建一个Item对象:
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&gt to std :: future< Item>?

更新:从问题中删除我的第一个想法(这是线程),并发布了一个答案.

解决方法

需要moar packed_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;
};

一般来说,我建议先忘记承诺和考虑packed_tasks. packed_task会为您维护(功能,承诺,未来)三重.它允许您以自然的方式(即返回和抛出等)来编写函数,并将异常正确传播到将来,您的示例被忽略(任何线程std ::中的未处理的异常终止您的程序!).

原文链接:https://www.f2er.com/c/116630.html

猜你在找的C&C++相关文章