Ho una classe base con diverse classi che la estendono. Ho alcune utilità di libreria generiche che creano un vettore contenente puntatori alla classe base in modo che tutte le sottoclassi funzionino. Come posso trasmettere tutti gli elementi del vettore a una specifica classe figlio?Posso trasmettere std :: vector <Animal*> a std :: vector <Dog*> senza esaminare ciascun 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);
}
La mia soluzione semplice sarebbe simile a questa:
// 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));
}
}
Duplicate: http://stackoverflow.com/questions/902667/stl-container-assignment- e-const-pointers – GManNickG
Non è del tutto dupe: si noti che non sta copiando da 'vector' a 'vector ', ma viceversa! –
Immagino che stia cercando un downcast automatico/implicito! – Abhay