自前仮想関数
前回やったのは継承関係が2段以上になると動かなかったのですが
それじゃああまりにもひどいので多重継承や継承関係を加味した修正をしてみました。
違いはというとBase*とDerived*の両方のTypeInfoをMapに登録することで、実行時に目的の型にするためのCasterを探せるようにしてあります。
これでやっとポリモーフィックな型に対する自前仮想関数が出来上がりました。
実は何でこんなことをしてるのかというのを言ってなかった気がする・・orz
はっきりさせておきますと「あるT*というポインタに対して適切な(メンバまたはフリーな)テンプレート関数を呼び出せる」仕組みを実装するというところにあります。
今回ポリモーフィックなT型に対するポインターは実装できたので、残るは静的な型に対する関数呼び出しになります。
ところで、通常の静的な関数呼び出しというのは引き渡されたポインタを使ってそのまま関数を呼ぶことを意味するので、これは考える必要はないでしょう。
ほかにもCRTPなクラス階層についても仮想関数的な呼び出しができるといいのですが
これも前の日記で簡単にソースを書いたので特に問題ないと思います。
そのほかの組み込み型やstlのコンテナへのポインタについては通常の静的呼び出し扱いで外部にオーバーライダーを作っておいて、
そこで実際の処理をするという手続きにします。
これでほとんどの型について呼び出すことはできるようになりましたので
今度はどうやってその呼び出しを選択するかというところを考えたいと思います。
で、なんで私はやけに説明口調なんでしょうか・・orz
というわけでポリモーフィック型のソース。
あまりに長いデス・・のでCafeのほうに乗せました。。。