にゃははー

はへらー

futureで欲しいutility

つらつらとfutureを使ってたらこういうのが欲しいというのがあったのでまとめ。

と言っても2つしか無いけど

(static_)future_cast

future<T>のcastが欲しいという話。std::(static|dynamic|const)_pointer_castがあるんだからfutureも欲しくないですか?っていう感じで。

http://melpon.org/wandbox/permlink/IXRr02x2RP8k3FVd

こういう感じの物が稀に欲しくなるときがあって、まぁ普通にgetしてcastすればいいんだけど、先のコード例みたいにpolymorphicなオブジェクトを受け渡したい時に、I/Fを限定できるのでABIとか保存しやすいのではないかという感じ。

C++11/14で書くにはdeferred async使ってやればいいけど、future::thenが来たらそれで実装してもいいのかもしれない。 future::then自体は提案とか読んでたりしてないからdeferredなのかasyncなのか、既にreadyでかつasyncなfutureをthenした時どこで走るのかとかそういうことを考え始めると困るかもしれない。

標準ライブラリの都合でMSVC12とかはとにかく酷いものになってるのでやめていただきたい。 C++14だと素直で良ても良い。

immediate

futureって未来に得られるかもしれない値を格納する感じのオブジェクトだけど、インターフェースとしてfutureを書かれると、「いや俺もう値持ってるし」みたいなときに(futureに直接値を仕込めないから)面倒で、じゃぁオーバーロードかー?というのもなんかなぁとなるので、即値をfutureでくるんでやるものが欲しい。

http://melpon.org/wandbox/permlink/ySucdA6uAo6BRKCu

実装としてはpromiseを使えば確かにできるんだけど、これshared stateをMT-safeにするオーバーヘッドが入るので、標準ライブラリの実装としてはMT-safeである必要はないようにもできるかもしれない(shared_futureは今のところ考えてなかったから問題はあるかもだけど)。