boost::future .then() 继续返回 boost::future

boost::future .then() continuations returning boost::future

本文关键字:boost future 返回 继续 then      更新时间:2023-10-16

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

一种

常见的情况是,然后函数对象的主体将 本身是一个基于未来的操作,这导致了 then() 回归未来>。在这种情况下,它几乎总是 如果你真正关心的是内心的未来,那么() 在返回之前执行隐式解包()(见下文)。

因此在下面的代码中

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

解包是 Boost 线程的条件扩展:

#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();
}