从基类中识别派生类

时间:2012-10-01 19:46:19

标签: c++ pointers polymorphism virtual abstract

有没有办法检查两个实例是否是相同的派生类?类似的东西:

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。

2 个答案:

答案 0 :(得分:8)

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

假设Base至少有一个虚函数。否则,typeid将无法获得正确的派生类型。

答案 1 :(得分:0)

我不知道返回实例派生类的方法。但是,dynamic_cast可用于检查实例是否与特定类兼容。

A和inst_ans = dynamic_cast(inst2); 将抛出异常

在哪里 A和inst_ans = dynamic_cast(inst1); 将正确执行

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