有没有办法检查两个实例是否是相同的派生类?类似的东西:
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。
答案 0 :(得分:8)
typeid(*inst1) == typeid(*inst2)
假设Base
至少有一个虚函数。否则,typeid将无法获得正确的派生类型。
答案 1 :(得分:0)
我不知道返回实例派生类的方法。但是,dynamic_cast可用于检查实例是否与特定类兼容。
A和inst_ans = dynamic_cast(inst2); 将抛出异常
在哪里 A和inst_ans = dynamic_cast(inst1); 将正确执行