を「フラット化」私は、単一の未来にネストされた先物を「フラット化」に使用ヘルパー関数を持っています。は、ネストされた先物
私はブーストライブラリから先物を使用してい:
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();
第2に、メソッドの名前がわかりません。どんな意見?
私は自分の非同期を書きました。私は 'std'という接頭辞を付けてはならないことに気づいただけです。 – ronag
あなたの答えにそのコメントを追加できますか?書式なしで読むのは難しいです。 – ronag
簡単な質問と同じように、標準化された 'std :: async'はなぜ平坦化されませんか?それはむしろ自然なもののようです... – ronag