Ich habe eine Basisklasse mit mehreren Klassen, die es erweitern. Ich habe einige generische Bibliotheksprogramme, die einen Vektor erstellen, der Zeiger auf die Basisklasse enthält, so dass jede der Unterklassen funktioniert. Wie kann ich alle Elemente des Vektors in eine bestimmte Kindklasse umwandeln?Kann ich std :: vector <Animal*> nach std :: vector <Dog*> werfen, ohne jedes Element zu betrachten?
// 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);
}
Meine naive Lösung würde wie folgt aussehen:
// 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));
}
}
Duplizieren: http://stackoverflow.com/questions/902667/stl-container-assignment- und-const-pointers – GManNickG
Es ist nicht ganz dip - beachte, dass er nicht von "vector" zu "vector " kopiert, aber umgekehrt! –
Ich denke er sucht nach einem automatischen/impliziten Downcast! – Abhay