boost::future .then() 继续返回 boost::future
Posted
技术标签:
【中文标题】boost::future .then() 继续返回 boost::future【英文标题】:boost::future .then() continuations returning boost::future 【发布时间】:2017-05-25 00:50:03 【问题描述】:我正在阅读关于改进 std::future
和 std::promise
的新 C++ 提案,这里是 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf,它说
then 函数对象的主体会 本身是一个基于未来的操作,这导致 then() 返回一个未来>。在这种情况下,它几乎总是 如果你真正关心的是内心的未来,那么 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
来实现相同的目标,但似乎 boost 延续并没有隐含地展开未来。我可以做些什么来从提升期货中启用相同的行为吗?似乎也没有 unwrap()
函数可用于生成的功能。
我是否坚持必须手动通过构造函数解开未来?同样在尝试出现以下错误时,我该怎么办?
inline explicit BOOST_THREAD_FUTURE(
BOOST_THREAD_RV_REF(
BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION
【问题讨论】:
【参考方案1】: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();
【讨论】:
这三个常量是在你#define BOOST_THREAD_VERSION 4
时自动设置的以上是关于boost::future .then() 继续返回 boost::future的主要内容,如果未能解决你的问题,请参考以下文章