检查类型是否来自给定的父类型

时间:2015-06-29 08:52:23

标签: c++ inheritance

我的问题的简化示例:

我有一个抽象类B。我有两个抽象类CA继承自B。我有很多继承自Cclass A; class B : public A; class C : public A; class B1 : public B; class B2 : public B; class C1 : public C; class C2 : public C; 的最终类:

A

我实现了一个收到B指针的算法,该指针必须知道该类型是来自C还是void algorithm(boost::shared_ptr<const A> a) { if(*a is a B instance) // do something else if(*a is a C instance) // do something other } 才能正常工作:

typeid(*a) == typeid(C1)

如何在没有C ++ 11的情况下检查它?

我知道如何使用int fromPos = viewHolder.getAdapterPosition(); studentList.remove(fromPos); mAdapter.notifyItemRemoved(fromPos); 检查最终类型,但我不知道如何检查父类型...

2 个答案:

答案 0 :(得分:2)

您可以使用dynamic_pointer_cast

if (std::dynamic_pointer_cast<B>(a)) {
   ...
}
else if (std::dynamic_pointer_cast<C>(a) {
   ...
}

答案 1 :(得分:2)

使用dynamic_cast

 if (dynamic_cast<B *>(a))
 {
      //   // a actually points at a B, or something derived unambiguously from B
 }

当然,更一般地说,您需要重新审视功能的设计。通常情况下,不需要了解从A派生的类更好。避免这种情况通常意味着使用A作为多态基础,为函数中所需的所有功能提供接口(例如virtualB等类的C函数集合专注于自己)。