Tengo una clase base con varias clases que la amplían. Tengo algunas utilidades de biblioteca genéricas que crean un vector que contiene punteros a la clase base para que cualquiera de las subclases funcione. ¿Cómo puedo convertir todos los elementos del vector a una clase infantil específica?¿Puedo lanzar std :: vector <Animal*> a std :: vector <Dog*> sin mirar cada elemento?
// A method is called that assumes that a vector containing
// Dogs casted to Animal is passed.
void myDogCallback(vector<Animal*> &animals) {
// I want to cast all of the elements of animals to
// be dogs.
vector<Dog*> dogs = castAsDogs(animals);
}
Mi solución ingenua sería algo como esto:
// A method is called that assumes that a vector containing
// Dogs casted to Animal is passed.
void myDogCallback(vector<Animal*> &animals) {
// I want to cast all of the elements of animals to
// be dogs.
vector<Dog*> dogs;
vector<Animal*>::iterator iter;
for (iter = animals.begin(); iter != animals.end(); ++iter) {
dogs.push_back(dynamic_cast<Dog*>(*iter));
}
}
duplicado: http://stackoverflow.com/questions/902667/stl-container-assignment- and-const-pointers – GManNickG
No es del todo engañoso, tenga en cuenta que no está copiando del 'vector' al' vector ', sino al revés. –
¡Supongo que está buscando un downcast automático/implícito! – Abhay