У меня есть класс, который наследуется от другого класса:
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 from
A`), но это было бы менее элегантным решением. Есть ли способ передать список наследуемых объектов как список объектов родительского типа?
class B : public A
? - person Max Langhof   schedule 17.12.2018