[std::map] encapsulation difficile
Bonjour à tous,
Je suis en train de faire évoluer la structure d'un ancien programme. Pour des raisons pratiques, je remplace mon std::vector<int, int> par :
Code:
std::map <int, Point> tableau_points_;
Pour faire simple:
- un tableau_points est associé à une image
- chaque Point doit avoir un "marqueur" (clé) fixe, car un autre Point lui est associé dans une autre image, qui possédera lui-même le même marqueur.
Comment faire pour donner une bonne encapsulation à cette map?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class PointDeControle
{
typedef Point<int> Point;
public:
PointDeControle();
void ajouterPoint(Point & point);
void supprimerPoint(Point &);
int getSize(void) { return tableau_points_.count() }
std::pair<int, Point> getPoint( int numero_point); // Comment faire mieux???
int getCle(Point & point);
private:
std::map <int, Point> tableau_points_;
std::vector <int> cle_supprime_; // sauvegarde des clés supprimées pour les réinsérer ensuite
}; |
Mise en évidence du problème du client:
- Ajout de 10 points par clé croissante (1,2,3,4,5,6,7,8,9,10).
- Suppression des points 4 et 5
- getPoint() ???? Comment savoir quelle clé est valide?
La fonction
Code:
std::pair<int, Point> getPoint( int numero_point)
permet au client de boucler sur tous les points:
Code:
1 2 3 4 5
|
for (int i = 0; i < point.getSize(); i++)
{
getPoint(i); // on récupère le point
} |
Ce code vous parait-il pourri? bien?
Vaut-mieux fournir un itérateur au client?
Merci pour votre aide précieuse ! ;)