我的问题的简化示例:
我有一个抽象类B
。我有两个抽象类C
和A
继承自B
。我有很多继承自C
或class 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);
检查最终类型,但我不知道如何检查父类型...
答案 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
作为多态基础,为函数中所需的所有功能提供接口(例如virtual
和B
等类的C
函数集合专注于自己)。