vector<Base*>
и vector<Derived*>
являются несвязанными типами, поэтому вы не можете сделать это. Это объясняется в C ++ FAQ здесь .
Вам нужно изменить переменную с vector<Derived*>
на vector<Base*>
и вставить в нее Derived
объектов.
Кроме того, чтобы избежать ненужного копирования vector
, вы должны передавать его по const-ссылке, а не по значению:
void BaseFoo( const std::vector<Base*>& vec )
{
...
}
Наконец, чтобы избежать утечек памяти и сделать ваш код безопасным для исключений, рассмотрите возможность использования контейнера, предназначенного для обработки объектов, распределенных в куче, например:
#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Base> vec;
Либо измените вектор, чтобы он содержал умный указатель вместо использования необработанных указателей:
#include <memory>
std::vector< std::shared_ptr<Base*> > vec;
или
#include <boost/shared_ptr.hpp>
std::vector< boost::shared_ptr<Base*> > vec;
В каждом случае вам необходимо соответствующим образом изменить функцию BaseFoo
.