我有我使用一个辅助功能“扁平化”嵌套期货成一个单一的未来:“拼合”嵌套期货
编辑:改名为“折”到“扁平化”的建议。
我使用的是期货从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();
其次,我有点不确定该方法的名称。有什么意见?
我写我自己的异步。只是意识到我不应该用'std'作为前缀。 – ronag 2012-02-18 10:15:31
您能否将该评论添加到您的答案中,如果没有格式化就很难阅读。 – ronag 2012-02-18 14:04:02
就像一个简单的问题,为什么不标准化的'std :: async'变平?这似乎是一个很自然的事情... – ronag 2012-02-18 14:07:12