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

标签 c++ c++11

在下面的示例代码中,我想创建一个 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/

相关文章:

引用类型的 C++11 成员变量, vector push_back 后的不同行为

c++ - 模板非类型参数

java - 获取 PageRank

c++ - 球体碰撞 (C++)

c++ - 为什么在 Win32 中使用 `GetAsyncKeyState()` 时我的热键会出错?

c++ - 为什么我们在 Mingw 中设置 sdl 时必须在主要函数中传递参数?

c++ - 错误 C2280 : 'std::thread::thread(const std::thread &)' : attempting to reference a deleted function

c++ - 为 C++ 二叉搜索树使用智能指针

c++ - 从成员函数 c++ 返回指针

c++ - vc++ 2010/2012:包含 unique_ptr 的结构的 std::vector 编译器错误