Mam klasę bazową z kilkoma klasami rozszerzającymi. Mam ogólne narzędzia biblioteki, które tworzą wektor zawierający wskaźniki do klasy bazowej, tak aby każda z podklas działała. Jak mogę rzucić wszystkie elementy wektora do określonej klasy potomnej?Czy mogę rzucić std :: vector <Animal*> na std :: vector <Dog*> bez patrzenia na każdy element?
// 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);
}
Moje naiwne rozwiązanie mogłoby wyglądać tak:
// 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));
}
}
Duplikat: http://stackoverflow.com/questions/902667/stl-container-assignment- i-const-pointers – GManNickG
Nie jest do końca dupe - zauważ, że nie kopiuje z 'wektora' do 'wektora ', ale na odwrót! –
Chyba szuka automatycznej/ukrytej przygnębienia! – Abhay