В моем коде у меня есть SuperType
с двумя подтипами... теперь у меня есть std::vector<SubTypeA>&
и мне нужно передать его функции, которая перебирает вектор и вызывает только функции из SuperType
... Мне нужно сделать это с обоими подтипами.
(Супертип еще не виртуальный, но мне нужно сделать его виртуальным в какой-то момент, потому что это просто общая часть двух подтипов, и не может быть его экземпляра)
Вот минимальный (не)рабочий пример:
#include <vector>
struct Super {
// stuff and functions
};
struct SubTypeA : public Super {
// stuff and functions
};
void func(const std::vector<Super>& sup) {
for (auto& elem: sup) {
// do things
}
return;
}
int main() {
std::vector<SubTypeA> v; // I get this from another place
std::vector<SubTypeA>& my_variable = v; // this is what I have in my code
func(my_variable); // does not work.
}
передача итератора тоже была бы решением.
Примечание: я получаю my_variable
из другого типа:
struct SomeContainer {
std::vector<SubTypeA> a;
std::vector<SubTypeB> b;
}
И я бы не хотел менять контейнер, так что std::vector<SubTypeA>&
он есть.
std::vector<Super>
отличается отstd::vector<SubTypeA>
и не может быть преобразован из одного в другой без потерь из-за нарезки объектов . - person Algirdas Preidžius   schedule 08.11.2017