代码之家  ›  专栏  ›  技术社区  ›  bofjas

从基类识别派生类

  •  4
  • bofjas  · 技术社区  · 13 年前

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

    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 回复  |  直到 13 年前
        1
  •  8
  •   Pete Becker    13 年前
    typeid(*inst1) == typeid(*inst2)
    

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

        2
  •  0
  •   Ramya Maithreyi    13 年前

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

    A&inst_ans=dynamic_cast(inst2); 将引发异常

    其中as A&inst_ans=dynamic_cast(inst1); 将正确执行

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