Передать список наследуемых объектов в функцию, которая принимает список родительских объектов

У меня есть класс, который наследует от другого класса:

class A {
    //...
};

class B : public A {
    //...
};

У меня есть функция, которая принимает (const) список указателей на тип отца:

void foo(const list<A*>& myList);

Я хочу передать этой функции список, который содержит указатели на дочерний тип:

list<B*> myList;
//populate list
foo(myList);

Я получаю ошибку компиляции:

ошибка C2664: невозможно преобразовать параметр 1 из 'std:: list<_Ty>' в 'const std:: list<_Ty> &'

Я не смог разыграть его ни в стиле C, ни с reinterpret_cast:

foo(reinterpret_cast<list<A*> >(myList));

Выдает ошибку

ошибка C2440: 'reinterpret_cast': невозможно преобразовать из 'std:: list<_Ty>' в 'std:: list<_Ty>'

foo((list<A*>)myList);

Выдает ошибку

ошибка C2440: "приведение типа": невозможно преобразовать из "std:: list<_Ty>" в "std:: list<_Ty>"

Одним из решений для этого было бы реализовать foo за list<B*> и 'список(Сis another type that inherits fromA`), но это было бы менее элегантным решением. Есть ли способ передать список наследуемых объектов в виде списка объектов родительского типа?

0 ответов

Другие вопросы по тегам