我有我使用一個輔助功能「扁平化」嵌套期貨成一個單一的未來:「拼合」嵌套期貨
編輯:改名爲「折」到「扁平化」的建議。
我使用的是期貨從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