首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::未来的.then()延续返回boost::未来

boost::未来的.then()延续返回boost::未来
EN

Stack Overflow用户
提问于 2017-05-25 00:50:03
回答 1查看 1.1K关注 0票数 5

我读到了C++关于改进std::futurestd::promise的新建议,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf

一种常见的情况是,当时函数对象的主体本身将是一个基于未来的操作,从而导致返回一个future>。在这种情况下,您真正关心的几乎总是内部的未来,因此()在返回之前执行一个隐式解包()(见下文)。

因此,在以下代码中

代码语言:javascript
复制
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来实现同样的目标,但似乎boost延续并没有隐式地打开未来。有什么我可以做的,以使同样的行为促进期货吗?在结果特性上似乎也没有可用的unwrap()函数。

我是否不得不通过构造函数来打开未来?同样,在尝试获得以下错误时,我应该做什么?

代码语言:javascript
复制
inline explicit BOOST_THREAD_FUTURE(
    BOOST_THREAD_RV_REF(
        BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-25 09:36:20

展开是Boost Thread的一个条件扩展:

代码语言:javascript
复制
#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();
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44170631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档