检查该类型是否来自给定的父类型
Check if the type comes from a given parent type
我的问题的简单示例:
我有一个抽象类A
。我有两个从A
继承的抽象类B
和C
。我有很多继承自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
}
如果没有C++11,我该如何检查
我知道如何用typeid(*a) == typeid(C1)
检查最终类型,但我不知道如何检查父类型。。。
您可以使用dynamic_pointer_cast:
if (std::dynamic_pointer_cast<B>(a)) {
...
}
else if (std::dynamic_pointer_cast<C>(a) {
...
}
使用dynamic_cast
。
if (dynamic_cast<B *>(a))
{
// // a actually points at a B, or something derived unambiguously from B
}
当然,更一般地说,您需要重新审视功能的设计。通常情况下,最好不需要知道从A
派生的类。避免这种情况通常意味着使用A
作为多态库,为函数中所需的所有功能提供接口(例如,B
和C
等类可能专门用于自己的virtual
函数集)。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 调用具有未标识类型的类的方法
- 在运行时选择父类的实现
- C++ 中模板化类型的类层次结构
- 如何在C++子类中访问父类的私有变量
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 当函数返回类型为父类时,如何返回子类的对象?
- C 不能将带有父类指针作为类型的静态模板成员定义引用
- 比较从父类继承但存储在父类的向量中的类的对象类型
- 当父类共享指针为返回类型时返回新的基类
- 我能判断投射到父类中的对象类型最初是否是C++中的子类吗
- 在C++中将派生类类型的向量链接到父类类型的向量
- 在类中声明与父类具有相同类型的模板类
- c++中的多态性,父类的载体中的类型丢失
- 如何调用父类类型列表的子类的方法?C++
- 如何使用父类类型的智能指针调用子类的析构函数
- 将父类类型的成员驻留在另一个类中