実行時継承関係抽出
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 とかどうだろう。