今天正好用到了dynamic_cast这个东西,分享一下小经验
dynamic_cast是RTTI的一部分,所以要想用这个东西一定要先设定编译器的选项,在vc里面在C++那个选项卡里面有一个language,下面有一个runtime type id.. 打开就噢了,不然编译时是没有问题的,运行就会报错。
这样一种情况
class
A
... {
} ;
class B: public A
... {
} ;
class C: public A
... {
} ;
A * a = new C();
if (dynamic_cast < B *> a)
... {
//如果是B的话.do some thing
}
... {
} ;
class B: public A
... {
} ;
class C: public A
... {
} ;
A * a = new C();
if (dynamic_cast < B *> a)
... {
//如果是B的话.do some thing
}
if语句中如果转换成功返回B*的指针。如果失败返回NULL。这都没问题大家都知道。
但是如果用引用的话就得注意了,看一下
try
... {
A& a=dynamic_cast(A&>(b);
}
catch (std::bad_cast & )
... {...
} ;
... {
A& a=dynamic_cast(A&>(b);
}
catch (std::bad_cast & )
... {...
} ;