Bonjour à tous.
J'ai un problème relativement aisé, mais dont je n'arrive pas à trouver une solution suffisamment élégante.
Soit un type de map, tel que map<int, string>.
Son itérateur est tel operator*() retourne un value_type, c'est à dire un pair<int, string>. du coup, on passe son temps à écrire iterator->first ou iterator->second.
Le jeu du jour est d'écrire un type d'itérateur qui puisse cacher qu'on a une map. Autrement dit, dont l'operator*() retourne le "->second".
J'ai envisagé la solution directe que voici:
Cela dit, je suis certain de rater des tas de détails.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Comment devrait-je opérer?
Quel lien cette classe devrait-elle avoir avec la classe de trait std::iterator?
Pour la petite histoire, j'ai en réalité plusieurs "banque" d'objets, concues pour fournir des identifiants à utiliser partout, et permettant de ne stoquer qu'un exemplaire.
De là, j'ai des dizaines de listes de tels identifiants (pour éviter les vectors de références)
J'aurai pu partir sur des shared_ptr, mais je n'ai le droit ni a boost, ni a c++11. (bon, j'aurai pu copier la classe manuellement)
Si je me mets le doigt dans l'œil et qu'il y a une bien meilleur architecture, n'hésitez pas à me le signaler.

 

 
		
		 
         
 

 
			
			

 
 
 
   
 


 Exercice de style : iterateur de valeur d'une map
 Exercice de style : iterateur de valeur d'une map
				 Répondre avec citation
  Répondre avec citation

 
 




 Envoyé par leternel
 Envoyé par leternel
					
Partager