2017-01-28 48 views
1

我有一個類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

+0

[性病:: TYPE_INFO(HTTP:// en.cppreference.com/w/cpp/types/type_info)? – Amadeus

+0

更詳細地解釋你的問題。你想切換多個案例嗎?您希望看到的郵政編碼,可能是語法錯誤。 –

回答

1

使用模板:

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

然後你就可以檢查這樣的類型:

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

但是如果我要搜索的類型在其他'initializer_list '中怎麼辦? – Garmekain

相關問題