Ma question porte sur le transtypage d'un vector<A*> en vector<B*> pour itérer correctement sur les objets de type B*.
Code :
- class A {};
- class B : public A {};
- class Mere {
- vector<A*> v;
- };
- class Fille : public Mere {
- Fille() {
- B *b1 = new B, *b2 = new B;
- v.push_back(b1); v.push_back(b2);
- }
- };
|
J'ai besoin maintenant dans une méthode de la classe Fille d'itérer sur le conteneur v (contenant des objets de type B* à ce moment).
Code :
- vector<B*> * w = reinterpret_cast<vector<B*>*>(&v);
- vector<B*>::iterator beg_it = w->begin();
|
Ce code marche bien mais le reinterpret_cast n'est pas du meilleur goût.
Je pensais à quelquechose du genre :
vector<B*>::iterator beg_it = dynamic_cast<vector<B*>::iterator>(v->begin());
mais j'ai du essayer sans succès.
Ou alors tout simplement, serait-il mieux d'itérer sur v normalement (après tout v ne contient que des pointeurs A* ou B* donc l'itération est identique (valeurs 32bits / 64bits) ?) et de caster au déréférencement de l'itérateur ?
vector<A*>::iterator it = v->begin()
B * b = dynamic_cast<B*>(*it);
merci pour vos lumières
edit: le forum n'aime pas les < > dans le code...
Message édité par antsite le 20-11-2008 à 01:22:02