4

有没有办法检查两个实例是否是同一个派生类?就像是:

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至少有一个虚函数。否则, 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 回答