実行時継承関係抽出

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 とかどうだろう。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h