前提として、抽象クラスとしてBaseがあり、そこから導出された A, B, C というクラスがあります。
Base* object = nanikasuru(); if(dynamic_cast(object)) { static_cast(object)->Hoge(); } else if(dynamic_cast(object)) { static_cast(object)->Hage(); } else if(dynamic_cast(object)) { static_cast (object)->Hige(); }
勿論実際はこんなあからさまなものではないですが、共通インターフェイスを呼び出す時に、派生クラスによって必要なパラメータがそれぞれ違うとか、そんな感じで、上記のような頭痛がする分岐が散乱しているわけです。
入社当時何も解らなかった自分はあのようなソースを手本に勉強しようなどと思っていたりして、あのまま進んでいたらどうなっていたのだろうと思うと少し寒気がするようでしません。