単に呼び出す可能性がある物は仮想関数にしとけば良いんでは。
キャストするにしても呼び出す関数はコード内で指定しているわけだから
仮想関数だと限定云々は良くわからん。