const/not const
void decade( int& result, const int& param ){ result = param * 10; } int a = 2; decade( a, a );
昨日のinlineに続いて、こんなのができるのも考えてなかった…。まぁ昨日のとは違って、これはさっき思いついたやつなんですけど。シミュレーションなんかで入力と出力があって、建前としては入力パラメータ型と、出力結果型を用意したい。けど、似たやつがあったりしてごちゃまぜにして同じ型にしてしまいたい。入力型のほうの中身が少しぐらい変わってもいい(const性が邪魔)。そんなときに使えそうです。
行列で A = B * C なんて書いたりしますけど、結局シミュレーションもこれと同じ。ただし、AとCの次元が違うことが良くあったり、B*というオペレータが非線形もはなはだしかったりするだけです。まぁ振動とかなら簡単に書けますけど。ってわけで、
Simulator s; Parameter p; Result r; r = s * p; // または、 r = s << p; // Result operator<<( Simulator&, const Parameter& ); cout << ( s << p ); // 結果をそのまま出力 MixedParam mp; mp = s << mp; // 後述。入出力混合。
とか書けると、可読性が上がるような上がらないような。これだと最初の例文みたいに入力変数と出力変数を同じにできなくなっちゃいますね(入出力混合の行)。見た目はできるけど、インスタンスが2つできちゃうので、コストがかかってしまい意味がないです。