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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
  1. Ajout de 10 points par clé croissante (1,2,3,4,5,6,7,8,9,10).
  2. Suppression des points 4 et 5
  3. getPoint() ???? Comment savoir quelle clé est valide?



La fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::pair<int, Point> getPoint( int numero_point)
permet au client de boucler sur tous les points:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 !