可能重复:
在 C++ 中查找对象的类型
我有一个检查指针的问题,看看它们是否符合特定的派生类并采取必要的措施。
假设我目前有 2 个派生类DerivedClass1
和DerivedClass2
基类BaseClass
。我想检查以下操作。
Ptr<BaseClass> ptr;
if (ptr points to DerivedClass1)
{
动作 1
}
否则
{
动作 2
}
如何检查指向特定 DerivedClass 的 ptr 点?
可能重复:
在 C++ 中查找对象的类型
我有一个检查指针的问题,看看它们是否符合特定的派生类并采取必要的措施。
假设我目前有 2 个派生类DerivedClass1
和DerivedClass2
基类BaseClass
。我想检查以下操作。
Ptr<BaseClass> ptr;
if (ptr points to DerivedClass1)
{
动作 1
}
否则
{
动作 2
}
如何检查指向特定 DerivedClass 的 ptr 点?
如果您要考虑更多面向对象,则只需将其设置为基类上的虚拟方法:
Ptr<BaseClass> ptr;
ptr->Action();
并让每个类根据需要实现它。我意识到这不是一个实际的答案,但它是实现目标的另一种方式,通常被认为更好,这就是我认为值得一提的原因。
如果BaseClass
是多态的(包含虚函数),可以测试:
if (dynamic_cast<DerivedClass1*>(ptr.get()))
但通常你应该按照 unwind 的建议使用动态调度,可能是访问者模式,用于这类事情。乱扔代码dynamic_cast
使维护变得困难。我dynamic_cast
几乎从不使用。
if(dynamic_cast<DerivedClass1*>(ptr))
{
// Points to DerivedClass1
}
else if(dynamic_cast<DerivedClass2*>(ptr)
{
// Points to DerivedClass2
}