値を返すifを書きたい!
満足のいく形で書けませんでした。
例えばこんな風な場合、
if_(condition()).then_( statement1(), statement2(), statement3() );
then_()はstatement3()の型が知りたいわけです。
普通はここで関数テンプレートを使うわけですが、構造体やクラスのメンバ関数は関数テンプレートを使えない…
勿論、メンバ関数に拘らずに下のようにしてもいいのですが、
if_(condition(), then_( statements ));
非常にダサイので個人的にとても厭です…
ということで関数テンプレートは使えない。かといって、
void then_(void delegate() dgs){ ... }
などとしてしまうと、当然型の情報は失われてしまうし、
void then_(...){ ... }
などとしてしまうと、普通に式が評価されてdelegate()に変換されなくなってしまう…
複数のdelegateを受け取る方法がなさそうなので、なんともかんとも…
ダサイのを我慢して関数テンプレートを使ったとしても、
void then_(T1)(T1 delegate() t1){ ... } void then_(T1, T2)(T1 delegate() t1, T2 delegate() t2){ ... } void then_(T1, T2, T3)(T1 delegate() t1, T2 delegate() t2, T3 delegate() t3){ ... } ...
とかをいっぱい書かないといけなくなる…
最後の式の型だけでいいのに、テンプレートパラメータの衝突が起こるので結局どの式の型もパラメータにしないといけないのがダサい。
elseやelseifによる分岐の数だけ型の情報を覚えておかないといけないし、となるとそれだけまたT1T2T3...を書かないといけないし。
やめたやめた!