実行時継承関係抽出
http://shinh.skr.jp/koneta/reflection_cpp.tar.gz
以下のようなクラス階層から、
struct C { virtual void f() {} }; struct D : public C { }; struct E { }; struct F : public C, public E{ };
以下のような情報を実行時に吐けるようになりました。
C <= D C <= F E <= F
あとは、
- クラス内に関数が無い場合親クラスに探しに行く
- 同名関数が子クラスにあれば、仮想関数テーブルを調べて子クラスの関数を見つけた場合、そちらを呼ぶ
の二点を実装すれば。実行時継承解決と実行時多態解決ができる、はず。
今回の実装は、 typeinfo を探してきてることと、 cxxabi.h を使っているくらいがキモ。最初は dynamic_cast 使ってうんぬん…とか苦労してたんだけど、 cxxabi.h を使うと思いの他簡単だった。
動いてるプロセスから情報拾って Doxygen とかどうだろう。