Bonjour,
J'ai un problème avec les iterateurs du C++.
Voici ma première classe:
Ainsi que celle-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class BodyPair{ public: BodyPair(Body *body1, Body *body2); private: Body *body1; Body *body2; };
Et pour finir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class AbstractPairManager{ public: virtual void addPair(Body *, Body *) = 0; virtual void removePair(Body *, Body *) = 0; virtual const std::vector<BodyPair *> &getPairs() const = 0; };
Ma question: comment overrider la méthod getPairs() dans ma classe MapPairManager de façon performante afin de retourner les valeurs de 'pairMap' ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class MapPairManager : public AbstractPairManager{ public: //override: addPair, removePair & getPairs private: std::map<std::string, BodyPair*> pairMap; };
Actuellement, je suis obligé de copier les valeurs de 'pairMap' dans un std::vector afin de le retourner. Ce n'est pas très performant.
Ca ne me dérange pas de modifier la signature de la méthod getPairs() dans la classe 'AbstractPairManager' mais je ne veux pas faire apparaitre un 'std::map' afin de rester générique.
La seule solution que j'ai trouvé serait de créer mon propre iterator qui serait retourné par la méthode 'getPair()':
Ensuite d'overrider la classe afin de créer un iterator sur les valeur de la map:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class GenericIterator{ public: virtual BodyPair *next() = 0; virtual bool hasNext() = 0; };
N'y a-t-il pas d'autre solution plus simple ? J'ai l'impression de sortir le bazooka pour tuer une mouche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class MapIterator : public GenericIterator{ public: BodyPair *next(){++mapIt; return mapIt->second;} //... },
Merci d'avance.
Partager