从基类中识别派生类类型

时间:2014-03-11 11:49:09

标签: c++ inheritance casting static-cast

在这种情况下,DeriA和DeriB类继承自Base:

class Base
class DeriA : public Base
class DeriB : public Base

std::list<Base> objects;

是否可以检查从对象列表的每个成员继承的类的类型? 我尝试在try / catch语句中使用static_cast,以检查对象的某个成员是否是特定类型,如下所示:

try
{
    DeriA tempA = static_cast<DeriA>(*objects_iterator);
    std::cout << "Found A" << std::endl;
} catch(std::bad_cast e)
{
    // Dealing with the exception
    std::cout << "Found B" << std::endl;
}

然而,这总是输出&#34;找到A&#34;无论正在访问的对象是DeriA还是DeriB。任何人都可以帮忙解释一下原因吗?

2 个答案:

答案 0 :(得分:0)

从我看到的小例子中,大多数使用std :: bad_cast异常都使用dynamic_cast。查看此示例,看看dynamic_cast是否可以帮助您。 dynamic_cast需要具有多态函数,但你会想出来的。

http://en.cppreference.com/w/cpp/types/bad_cast

-AP _

答案 1 :(得分:-1)

不,你不能正确地做到这一点。 C ++没有构建运行时类型信息的概念,因此无法使用静态强制转换进行转换,看看会发生什么。

有些编译器虽然实现了一个(可怕的)RTTI系统,它允许你使用dynamic_cast。 大多数系统上的RTTI如何产生不必要的副作用,导致像Qt等大型框架实现自己的MACRO Magic RTTI系统。