class B{ virtual void func(const B& o)=0;}
class D1 : public B{void func(const B& o);};
class D2 : public B{void func(const B& o);};
...
class Dn : public B{void func(const B& o);}:

funcはDiとDjの組み合わせで変化する関数ですが
各Diクラスのfuncを実装する場合
DiクラスでD0~Dnに対するfunc_jを定義
Diクラスのfuncの実装でdynamic_castを使い?func_jに誘導?

なんか筋が悪い気がしますが、他にやり方ありますか?