Iterateur générique en c++
Bonjour,
J'ai un problème avec les iterateurs du C++.
Voici ma première classe:
Code:
1 2 3 4 5 6 7
| class BodyPair{
public:
BodyPair(Body *body1, Body *body2);
private:
Body *body1;
Body *body2;
}; |
Ainsi que celle-ci:
Code:
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;
}; |
Et pour finir:
Code:
1 2 3 4 5 6
| class MapPairManager : public AbstractPairManager{
public:
//override: addPair, removePair & getPairs
private:
std::map<std::string, BodyPair*> pairMap;
}; |
Ma question: comment overrider la méthod getPairs() dans ma classe MapPairManager de façon performante afin de retourner les valeurs de '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()':
Code:
1 2 3 4 5
| class GenericIterator{
public:
virtual BodyPair *next() = 0;
virtual bool hasNext() = 0;
}; |
Ensuite d'overrider la classe afin de créer un iterator sur les valeur de la map:
Code:
1 2 3 4 5
| class MapIterator : public GenericIterator{
public:
BodyPair *next(){++mapIt; return mapIt->second;}
//...
}, |
N'y a-t-il pas d'autre solution plus simple ? J'ai l'impression de sortir le bazooka pour tuer une mouche.
Merci d'avance.