在这种情况下,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。任何人都可以帮忙解释一下原因吗?
答案 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系统。