Puis-je cast std::vector<Animal*> std::vector<Chien*> sans regarder chaque élément?

J'ai une classe de base avec plusieurs classes de l'étendre. J'ai quelques génériques de la bibliothèque d'utilitaires qui crée un vecteur contenant des pointeurs vers la classe de base de sorte qu'aucune des sous-classes vont travailler. Comment puis je l'ai jeté tous les éléments d'un vecteur à un enfant de la classe?

//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);
}

Mon naïf solution devrait ressembler à quelque chose comme ceci:

//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));
    }
}
Dupliquer: stackoverflow.com/questions/902667/...
Ce n'est pas tout à fait dupe - notez qu'il n'est pas de la copie à partir vector<Derived*> à vector<Base*>, mais dans l'autre sens!
Je suppose qu'il est à la recherche pour une automatique / implicite abattu!
Hm, c'est vrai. :X
Merci pour les commentaires. 🙂 N'était pas sûr de la façon de poser et ouais, a eu un moment difficile de savoir quoi chercher!

OriginalL'auteur Beau Simensen | 2009-07-24