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

时间:2017-01-28 01:33:20

标签: c++ polymorphism

我有一个班级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的参数内一般地知道基类指针的派生类的类型?

已解决THIS QUESTION

1 个答案:

答案 0 :(得分:1)

使用模板:

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

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

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