「フラットな」ネストされた先物
-
27-10-2019 - |
質問
ネストされた先物を単一の先物に「フラット化」するために使用するヘルパー関数があります:
編集:提案されているように、「fold」の名前を「flatten」に変更しました。
Boostライブラリの先物を使用しています: ジェネラコディセタグプレ
次のように使用されます: ジェネラコディセタグプレ
問題は、「ネストされた」未来をジェネラコディセタグコードに変換した場合にのみ機能することです。それを回避するための良い方法はありますか?私が欲しいのは次のようなものです: ジェネラコディセタグプレ
次に、メソッドの名前が少しわかりません。何か意見はありますか?
解決
(注:boost::unique_future
をstd::async
と連携させる方法がわからないため、boost::unique_future
のすべてのインスタンスをstd::future
に置き換えました。コードはテスト済みで、私の側で機能します。)
問題は、ラムダ式が値(実際にはコピーによるキャプチャを意味する)または参照(将来の存続期間をクロージャに結び付けたいため、ここでは適用されない)のいずれかでキャプチャするのに対し、std::future
は移動のみであるということです。その答えは通常std::bind
ですが、この場合、std::async
にはbind
のような機能が組み込まれています。
ジェネラコディセタグプレ
恐れ入りますが、お勧めできる名前がありません。テンプレートがおそらく再帰的に機能してstd::future<std::future<std::future<...std::future<T>...>>>
をstd::future<T>
に変換する場合は、おそらくflatten_future
と呼びます。あるいは、そもそも一般的なタグコードしか受け入れないので、おそらく単に一般的なタグコードです。
すでに単項flatten
があると仮定します:
ジェネラコディセタグプレ