DxLibEx icon indicating copy to clipboard operation
DxLibEx copied to clipboard

dxle::optionalを作るか否か

Open yumetodo opened this issue 9 years ago • 2 comments

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なんてなかった)

yumetodo avatar Jan 27 '16 14:01 yumetodo

dxlibex内で使う予定はありますか?あるならば持ってきて良いと思います。

Nagarei avatar Jan 28 '16 13:01 Nagarei

一般に例外は重いので、stream周りを作る時とか、失敗しやすい関数(あったら)のnoexcept版を作るときには便利かなと。

ただ上の2つを持ってこれるか試験した所、後者は相当手直ししないとVS2013で動かなそうですし前者も多少手直しが必要なので当面先送りですかね・・・

https://github.com/TakeObara/DoNotPushGame/branches この辺を落として(add_sprout_optionaladd_optionalがそれです)みるとどのくらいエラーが出るかわかると思いますが、constexprメタ関数があるとないでこんなにも手間が違うのか、と唸っていました。ヘタするとconstexpr使えない環境向けにはboost.optionalをベースにN3672に合わせるように書いたほうが楽かもしれない。

yumetodo avatar Jan 28 '16 13:01 yumetodo