我有一个辅助函数,我用它来将嵌套的期货“展平”成一个单一的期货:
编辑:按照建议将“折叠”重命名为“展平”。
我正在使用来自 boost 库的期货:
template<typename T>
auto flatten(boost::unique_future<T>&& f) -> boost::unique_future<decltype(f.get().get())>
{
auto shared_f = boost::shared_future<T>(std::move(f));
return async(launch_policy::deferred, [=]() mutable
{
return shared_f.get().get();
});
}
它是这样使用的:
auto nested_future_result = async([]() -> boost::shared_future<int>
{
auto tmp = async([]
{
return 1;
});
return boost::shared_future<int>(std::move(tmp));
});
boost::unique_future<int> future_result = flatten(nested_future_result);
int result = future_result.get();
问题是,这仅在我将“嵌套”未来转换为shared_future
. 有什么好办法绕过它吗?我想要的是这样的:
auto future_result = flatten(async([]
{
return async([]
{
return 1;
});
}));
int result = future_result.get();
其次,我有点不确定该方法的名称。有什么意见吗?