Kann ich warf std::vector<Tier*> std::vector<Hund*> ohne Blick auf jedes element?

Ich habe eine base-Klasse mit mehreren Klassen erweitert werden. Ich habe einige generische Bibliothek Dienstprogramme, erstellt einen Vektor mit Zeigern auf die Basisklasse, so dass jede der Unterklassen funktioniert. Wie kann ich warf alle Elemente des Vektors um einen bestimmten untergeordneten Klasse?

//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: stackoverflow.com/questions/902667/...
  • Es ist nicht ganz dupe - Hinweis, dass er nicht das kopieren von vector<Derived*> zu vector<Base*>, aber anders herum!
  • Ich denke, er ist auf der Suche für eine automatische / implizite niedergeschlagen!
  • Hm, stimmt. :X
  • Vielen Dank für das feedback. 🙂 War nicht sicher, wie Sie Sie zu Fragen, dies und ja, hatte eine harte Zeit zu wissen, was Sie suchen!
Schreibe einen Kommentar