DxLibEx
DxLibEx copied to clipboard
dxle::optionalを作るか否か
boost::optionalのほうが有名ですが、STLにもかなり前に提案されて、N1878, N3406, N3527, N3672, N3793
と版を重ねており、
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/#mailing2013-05
を見る限りN3672がC++14採択されたようです。しかしながら
https://github.com/akrzemi1/Optional/blob/master/README.md#known-issues Currently, the reference (and the only known) impementation of certain pieces of functionality explore what C++11 identifies as undefined behavior (see national body comment FI 15: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3770.html#FI15).
というissueのためにC++14から取り除かれ、library fundamentals TSとしてstd::experimental::optionalに入れられた模様です。
http://en.cppreference.com/w/cpp/experimental/optional
例えばmsys2のpacmanで落ちてくるmingw-gcc 5.3.0にはこれがついていたりするんですが、(VSにはまだ無いっぽい)
C++17が出るまでのつなぎとして、実装するべきでしょうか?あったらあったで便利だとは思うんですが。
もし実装する場合は https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/optional https://github.com/akrzemi1/Optional この辺から持ってくることになると思いますが。(結構いろんの機能があって実装が大変なので持ってくるのが吉、どちらもconstexprが使われており、またLICENSEも同じ、ただし完全にconstexprにするにはC++14のconstexpr準拠が必要でVSなんてなかった)
dxlibex内で使う予定はありますか?あるならば持ってきて良いと思います。
一般に例外は重いので、stream周りを作る時とか、失敗しやすい関数(あったら)のnoexcept版を作るときには便利かなと。
ただ上の2つを持ってこれるか試験した所、後者は相当手直ししないとVS2013で動かなそうですし前者も多少手直しが必要なので当面先送りですかね・・・
https://github.com/TakeObara/DoNotPushGame/branches
この辺を落として(add_sprout_optionalとadd_optionalがそれです)みるとどのくらいエラーが出るかわかると思いますが、constexprメタ関数があるとないでこんなにも手間が違うのか、と唸っていました。ヘタするとconstexpr使えない環境向けにはboost.optionalをベースにN3672に合わせるように書いたほうが楽かもしれない。