检查指针是否指向特定的C ++类

时间:2012-08-14 11:15:34

标签: c++ pointers

  

可能重复:
  Finding the type of an object in C++

我有一个检查指针的问题,看看它们是否符合特定的派生类并采取必要的措施。

假设我目前有2个派生类DerivedClass1DerivedClass2以及基类BaseClass。我想检查以下行动。

Ptr<BaseClass> ptr;

if (ptr points to DerivedClass1) { 措施1 } 其他 { 动作2 }

如何检查特定DerivedClass的ptr点?

3 个答案:

答案 0 :(得分:19)

如果您想要更加面向对象,那么您只需将其作为基类的虚方法:

Ptr<BaseClass> ptr;

ptr->Action();

让每个类根据需要实现它。我意识到这不是一个真正的答案,但它是实现目标的另一种方式,通常被认为是更好的,这就是我认为值得一提的原因。

答案 1 :(得分:12)

如果BaseClass是多态的(包含虚函数),则可以测试:

if (dynamic_cast<DerivedClass1*>(ptr.get()))

但通常你应该使用动态调度作为展开建议,可能是访客模式,对于这种事情。使用dynamic_cast乱丢代码会使维护变得困难。我几乎从不使用dynamic_cast

答案 2 :(得分:4)

if(dynamic_cast<DerivedClass1*>(ptr))
{
  // Points to DerivedClass1
}
else if(dynamic_cast<DerivedClass2*>(ptr)
{
  // Pointes to DerivedClass2
}