boost :: future .then()continuation返回boost :: future

时间:2017-05-25 00:50:04

标签: c++ c++11 asynchronous boost future

我正在阅读有关std::futurestd::promise此处http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf的改进的新C ++提案,并且说

  

当时函数对象的主体会发生这种情况   本身是一个基于未来的操作,导致then()   返回未来>。在这种情况下,几乎总是如此   你真正关心的是内心的未来,那么()   在返回之前执行隐式unwrap()(见下文)。

因此在以下代码中

auto promise = std::promise<int>{};
auto another_future = promise.get_future().then([](auto future) {
    return std::async([]() { return 1; });
});

another_future的类型为std::future<int>而不是std::future<std::future<int>>

我试图使用boost::future来实现相同的目标,但似乎提升延续不会隐含地展开未来。我可以采取哪些措施来实现与期货相同的行为吗?似乎没有unwrap()函数可用于结果特征。

我是不是必须通过构造函数手动打开未来?另外,在尝试我得到以下错误时,我该怎么办?

inline explicit BOOST_THREAD_FUTURE(
    BOOST_THREAD_RV_REF(
        BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION

1 个答案:

答案 0 :(得分:2)

Unwrapping是Boost Thread的条件扩展名:

#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include <boost/thread.hpp>

int main() {
    auto promise = boost::promise<int>{};
    boost::future<int> another_future = 
        promise.get_future().then([](auto) {
            return boost::async([]() { return 1; });
        }).unwrap();
}