3
我有一個基地std::vector
和一個std::initializer_list<Attribute*>
,它是由派生類Attribute
類組成的函數的參數。應該替換現有類型,添加新類型
class Attribute {};
class Place : public Attribute {};
class Time : public Attribute {};
class Way: public Attribute {};
Place* place = new Place();
Time* time = new Time();
Way* way = new Way();
Place* place2 = new Place(...);
Time* time2 = new Time(...);
auto baseList = std::vector<Attribute*>({ place, time, way })
void updateBaseList(std::vector<Attribute*>& v, std::initializer_list<Attribute*> l);
什麼updateBaseList
必須做的是,如果l
元素的類型等於一體的baseList
,更新baseList
與l
的一個值。如果類型不baseList
遇到的,它必須添加到它。如果要查找的類型
注意不Attribute*
,取而代之的則是派生類。
我嘗試
void updateBaseList(std::vector<Attribute*>& v, std::initializer_list<Attribute*> l) {
bool found;
for (auto listIt = l.begin(); listIt != l.end(); ++listIt) {
found = false;
for (auto attrIt = baseList.begin(); attrIt != baseList.end(); ++attrIt) {
if (typeid(**listIt) == typeid(**attrIt)) {
*attrIt = *listIt;
found = true;
break;
}
}
if (!found) {
baseList.push_back(*listIt);
}
}
}
但typeid(**listIt)
和typeid(**attrIt)
總是返回Base
。
目標
如果我打電話updateBaseList(baseList, { time2, place2 })
baseList應該{ place2, time2, way }