vector<Base*>
y vector<Derived*>
son tipos no relacionados, por lo que no puede hacer esto. Esto se explica en las preguntas más frecuentes de C++ here.
Puede cambiar su variable de vector<Derived*>
a vector<Base*>
e insertar Derived
objetos en ella.
Además, debe pasar el vector mediante const-referencia, no por valor:
void BaseFoo(const std::vector<Base*>& vec)
{
...
}
Por último, para evitar pérdidas de memoria, y hacer que su código de excepción de seguridad, considerar el uso de un recipiente diseñado para manejar montón objetos -allocated, por ejemplo:
#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Base> vec;
Alternativamente, cambian el vector para sostener un puntero inteligente en lugar de usar punteros primas:
#include <memory>
std::vector< std::shared_ptr<Base*> > vec;
o
#include <boost/shared_ptr.hpp>
std::vector< boost::shared_ptr<Base*> > vec;
En cada caso, lo que se necesita para modificar su función BaseFoo
en consecuencia.
Creo que necesita aclarar si BaseFoo está destinado a tomar el vector por const o sin referencia de referencia (sería muy raro que lo tome por valor). En otras palabras, ¿necesita BaseFoo modificar el vector? –