Если я правильно понял вопрос, у вас возникает следующая ситуация
class Base {};
class Derived: public Base {};
class Derived2: public Base {};
void foo(const vector<Derived*>&);
void bar()
{
vector<Base*> baseVec;
// Fill baseVec with pointers to Derived objects
foo(baseVec); // Does not work
}
Проблема в том, что, хотя Base
и Derived
связаны через наследование, типы vector<Base*>
и vector<Derived*>
абсолютно не связаны.Между ними нет преобразования.
Кроме того, существует дополнительная проблема, заключающаяся в том, что baseVec
может также содержать указатели на других производных классов, таких как Derived2
, а foo
не можетобработайте их.
Единственными реальными решениями являются
- , изложенные в вопросе: создайте новый
vector<Derived*>
и заполните его dynamic_cast
ed содержимым исходного вектора - избегайте такого несоответствия типов в программе.