我有一个班级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的参数内一般地知道基类指针的派生类的类型?
答案 0 :(得分:1)
使用模板:
template <typename T>
bool isType(Attribute* a) {
return dynamic_cast<T*>(a);
}
然后你可以检查这样的类型:
bool isFirstElementAPlace = isType<Place>(*(l.begin()));