J'ai un Boost.BiMap privé dans une classe, et je voudrais exporter une vue publique d'une partie de cette carte. J'ai deux questions sur le code suivant:Exposer la vue publique de Boost.BiMap itérateur en privé
class Object {
typedef bimap<
unordered_set_of<Point>,
unordered_multiset_of<Value>
> PointMap;
PointMap point_map;
public:
??? GetPoints(Value v) {
...
}
La première question est de savoir si ma méthode d'itération pour obtenir les associés à une Value
« s Point
est correct. Voici le code que j'utilise pour itérer sur les points. Ma question est si je suis itératif correctement parce que j'ai trouvé que je devais inclure la condition it->first == value
, et n'était pas sûr si cela était exigé donné une meilleure interface que je peux ne pas savoir.
PointMap::right_const_iterator it;
it = point_map.right.find(value);
while (it != point_map.right.end() && it->first == val) {
/* do stuff */
}
La deuxième question est quelle est la meilleure façon de fournir une vue du public des GetPoints (type ???
de retour ci-dessus) sans exposer le iterator bimap car il semble que l'appelant aurait à connaître point_map.right.end()
. Toute structure efficace telle qu'une liste de références ou un ensemble fonctionnerait, mais je suis un peu perdu sur la façon de créer la collection.
Merci!
En ce qui concerne la première approche de la deuxième question, est-ce que PointMap doit être publicisé? Puis-je utiliser un type d'itérateur générique pour l'interface publique? –
PointMap peut toujours être privé. Le typedef match_iterator dans mon exemple de code doit être public afin qu'il puisse être utilisé par du code en dehors de la classe. – user450018