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

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

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*> и 'list(Cis another type that inherits fromA`), но это было бы менее элегантным решением. Есть ли способ передать список наследуемых объектов как список объектов родительского типа?


person SIMEL    schedule 17.12.2018    source источник
comment
Нет, не делайте динамическое приведение. Она не будет работать. Это пустая трата времени. Короткий ответ: нет, С++ так не работает.   -  person Sam Varshavchik    schedule 17.12.2018
comment
Я полагаю, вы имели в виду class B : public A?   -  person Max Langhof    schedule 17.12.2018
comment
Ни один из связанных вопросов, похоже, не объясняет, как это сделать правильно. то есть написать функцию, которая может работать с набором производных классов. Ответ здесь: gcc.godbolt.org/z/MQwzHu   -  person balki    schedule 17.12.2018
comment
Улучшенный пример: gcc.godbolt.org/z/yvklII   -  person balki    schedule 17.12.2018