知道函数内参数中基指针的派生类的类型

Know type of derived class of base pointer in an argument inside a function?

本文关键字:指针 派生 类型 函数 参数      更新时间:2023-10-16

我有一个类Attribute

class Attribute {};

这是某些类的基类,例如

class Place : public Attribute {};
class Time : public Attribute {};
class Way: public Attribute {};

然后我有两个initializer_lists

Place* place = new Place();
Time* time = new Time();
Way* way = new Way();
auto il1 = std::initializer_list<Attribute*>({ place, time });
auto il2 = std::initializer_list<Attribute*>({ place, way });

我的目标是了解初始值设定项列表的元素,这些元素属于第二个initializer_list元素的类型。

一种方法是做类似的事情

bool isFirstElementAPlace = (dynamic_cast<Place*>(*(l.begin())) ? true : false);

但是Place*应该用typeid(*(il2.begin()))代替,但它返回的类型信息是Attribute*,而不是Place*左右。所以这个答案是无效的。


有没有办法在initializer_list的参数中一般知道基类指针的派生类的类型?

在这个问题中解决了

使用模板:

template <typename T> 
bool isType(Attribute* a) {
   return dynamic_cast<T*>(a);
}

然后你可以像这样检查类型:

bool isFirstElementAPlace = isType<Place>(*(l.begin()));