DOSEIの日記

技術メモ+日常ログ

ダウンキャストによる関数呼び出し

抽象基底クラス B があったとして、クラス D1, D2 が派生している。
関数 f(D1), f(D2) をオーバーロード定義したとき, f に B の変数を渡して自動的に呼ばれるものが振り分けられないかなーと思ったけど、だめだった。こういうときはどうすればいいのか。 f(B) を定義して is で調べるしかないのかな?

もしくはこう?

if(x is D1) f(x as D1);
else if(x is D2) f(x as D2);

これはいやだな。

こういうことをやる機能を, マルチメソッドとか多重ディスパッチとかいうらしい.