可能重复:
在C++中查找对象的类型
我有一个问题,检查指针,看看它们是否符合特定的派生类,并采取必要的行动.
可以说我目前有2个派生类DerivedClass1和DerivedClass2基类BaseClass.我想检查以下操作.
Ptr<BaseClass> ptr;
if (ptr points to DerivedClass1)
{
action1
}
else
{
action2
}
如何检查特定DerivedClass的ptr点?
unw*_*ind 19
如果你想要更加面向对象,你只需要在基类上创建一个虚方法:
Ptr<BaseClass> ptr;
ptr->Action();
Run Code Online (Sandbox Code Playgroud)
并让每个类根据需要实现它.我意识到这不是一个真正的答案,但它是实现你的目标的另一种方式,通常被认为是更好的,这就是我认为值得一提的原因.
Ben*_*igt 13
如果BaseClass是多态的(包含虚函数),您可以测试:
if (dynamic_cast<DerivedClass1*>(ptr.get()))
Run Code Online (Sandbox Code Playgroud)
但通常你应该使用动态调度作为展开建议,可能是访客模式,对于这种事情.乱丢你的代码dynamic_cast使其难以维护.我dynamic_cast几乎从不使用.
if(dynamic_cast<DerivedClass1*>(ptr))
{
// Points to DerivedClass1
}
else if(dynamic_cast<DerivedClass2*>(ptr)
{
// Pointes to DerivedClass2
}
Run Code Online (Sandbox Code Playgroud)