Bonjour,
pour l'un des mes codes, je souhaite stocker des objets. Ils sont construits à la création de l'application et sont lus ensuite/modifiés par la suite (mais sans jamais toucher à la structure des objets). Je souhaite conserver l'ordre de création des objets, pouvoir itérer rapidement dessus et si possible pouvoir accéder aléatoirement rapidement à certains éléments. J'en arrive au code suivant :
J'aimerais savoir si cette approche est "bien écrite" et sinon, comment rendre ce code le plus propre possible (j'ai volontairement supprimé la gestion d'erreur dans le constructeur et les fonctions getPoint si le nom n'existe pas pour rendre le code simple).
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 container { public: container() { // Charger un ensemble de points (la classe point contient un attribut name dont la valeur est unique) for(__) { m_points.push_back(std::unique_ptr<point>(new point(name)); m_pointsMap.emplace(name, std::ref(*m_points.back().get())); } } const std::vector<std::unique_ptr<point>> & getPoints() const {return m_points}; const point & getPoint(const std::string & name) const {return m_pointsMap.at(name).get()} point & getPoint(const std::string & name) {return m_pointsMap.at(name).get()} private: std::vector<std::unique_ptr<point>> m_points; std::map<std::string, std::reference_wrapper<point>> m_pointsMap; }
D'autre part, ce qui me gène un peu est d'exposer ma structure de stockage au travers de getPoints (ie const std::vector<std::unique_ptr<point>>). Ce qui entraîne aussi des choses comme :
où là aussi, je fais apparaître ma structure de stockage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for(std::vector<std::unique_ptr<point>>::size_type i=0; i<getPoints().size(); i++)
Si vous avez des conseils, je suis preneur ! Merci d'avance !!
Partager