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

lor*_*das 8 c++ pointers

可能重复:
在C++中查找对象的类型

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

可以说我目前有2个派生类DerivedClass1DerivedClass2基类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几乎从不使用.


Aes*_*ete 5

if(dynamic_cast<DerivedClass1*>(ptr))
{
  // Points to DerivedClass1
}
else if(dynamic_cast<DerivedClass2*>(ptr)
{
  // Pointes to DerivedClass2
}
Run Code Online (Sandbox Code Playgroud)

  • @Component10 我只是回答了 OP 的问题。我不容忍这种做法,而且通常只在做出_糟糕的设计决策_ 时才需要这样做。感谢您指出继承情况,以防 OP 决定尝试这样的事情。 (3认同)