如何使用Dynamic_cast获得对象类型

How do I get object type using dynamic_cast?

本文关键字:对象 类型 cast 何使用 Dynamic      更新时间:2023-10-16

我正在做作业,我被困在某件事上:我已经完成了所有工作,但是在特定类中有一个功能,我不知道如何实现。我有一个名为A的课程,并从A继承的两个班级,我们称它们为B和C。因此,基本上主要类是A,并且继承类是B和C,并且我有一组这些类型的元素(A(,set<A*>,并且具有标识每个类的枚举,例如:enum { A , B ,C};

该功能必须过滤集合并返回带有枚举类型的集合,例如:

set<A*> MainClass::getByType(Type type) const { }

问题是我们不允许使用关键字typeid,而是我们必须使用dynamic_cast来确定类型。

我的问题是:当我传递set<A*>中的每个元素时,我应该如何使用dynamic_cast

我不明白,请帮助我,这是作业的最后一件事,我被困了,预先感谢您,3

要解决您的任务,您不需要知道哪个类是特定的实例属于的,而是过滤指向特定类别的指针。因此,定义一个函数,该函数检查指针是否是使用Switch的正确类:

bool checkType( A *ptr, Type type )
{
    switch( type ) {
       case typeB: return dynamic_cast<B*>( ptr );
       // check for other types here
       ...
       default: throw std::runtime_error( "this type not supported" );
    }
}

然后使用std :: copy_if进行过滤所需的类型,并将它们放入结果集或仅使用范围循环中。如果尚不清楚该代码的工作原理,则可以更明确地编写检查行:

   case typeB: return dynamic_cast<B*>( ptr ) != nullptr;