我读到了C++关于改进std::future和std::promise的新建议,http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf说
一种常见的情况是,当时函数对象的主体本身将是一个基于未来的操作,从而导致返回一个future>。在这种情况下,您真正关心的几乎总是内部的未来,因此()在返回之前执行一个隐式解包()(见下文)。
因此,在以下代码中
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发布于 2017-05-25 09:36:20
展开是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();
}https://stackoverflow.com/questions/44170631
复制相似问题