4

2 つのインスタンスが同じ派生クラスかどうかを確認する方法はありますか? 何かのようなもの:

Base *inst1 = new A();
Base *inst2 = new B();
Base *inst3 = new A();


bool b1 =  (inst1->class== inst2->class); //<-- should evaluate to false
bool b1 =  (inst2->class== inst3->class); //<-- should evaluate to true

明らかに、基本クラスに仮想関数を追加し、各派生クラスを実装して一意の値を返すことができます。ただし、この基本クラスからの派生に基づいて API を作成しているため、派生クラスに固有のものを実装する必要はありません。

4

2 に答える 2

8
typeid(*inst1) == typeid(*inst2)

Base少なくとも 1 つの仮想関数があると仮定します。そうしないと、typeid は正しい派生型を取得できません。

于 2012-10-01T19:47:34.057 に答える
0

インスタンスの派生元のクラスを返すメソッドを知りません。ただし、dynamic_castを使用して、インスタンスが特定のクラスと互換性があるかどうかを確認できます。

A&inst_ans = dynamic_cast(inst2); 例外をスローします

ここで、A&inst_ans = dynamic_cast(inst1); 正しく実行されます

http://en.wikipedia.org/wiki/Dynamic_cast

于 2012-10-01T20:14:42.733 に答える