:この場合2つのオブジェクトが同じ基本クラスから派生しているかどうかを知る方法?
class Base{...};
class Sub1 : public Base{...};
class Sub2 : public Base{...};
Sub1 s1;
Sub2 s2;
bool is_same_base(void *obj1, void *obj2){
...
}
if(is_same_base(s1,s2){
printf("Great! S1 and S2 and from same base class!\n");
}
、私はobj1とobj2のは、同じ基本クラスを派生しているかどうかを知るための最良の/高速な方法だとわからないのですか?
仮想テーブルのエントリを1つずつ比較し、両方の仮想テーブルに関数ポインタが存在する場合は、それらが同じ基本クラスから派生していると言うことができます。これは効率的ではありません。
コメントがありますか?
もしあなたがそれを比較している基底クラスを知っているなら、 'dynamic_cast'を使ってこれを知ることができます。 –
' bool is_same_base(void * obj1、void * obj2) 'の署名を使わなければなりませんか? – GManNickG
実行時にも、コンパイル時にも必要ですか? – pmr