我正在阅读有关std::future
和std::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
答案 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();
}