Quand je travaille avec Boost_Foreach, il n'y a pas de problème avec des modèles simples comme vecteur. Mais lorsque j'essaie d'itération via la carte>, par exemple, j'ai besoin de tapeDef le type d'élément. P>
Y a-t-il une solution de contournement? P>
4 Réponses :
Il y a un problème car il s'agit d'une macro, et donc ne peut donc pas gérer les types contenant des virgules (le préprocesseur ne connaît pas les modèles).
Vous pouvez également déclarer la variable avant la boucle, voir Documentation . P>
typedef std::pair<const int, double> MyPair; //or typedef std::map<int, double>::value_type MyPair; BOOST_FOREACH(MyPair& ref, my_map) { ... }
Vous devriez probablement faire ça: std :: map
Également en C ++ 11; Boost_foreach (auto & ref, my_map) {...}
http://lists.boost.org/archives/boost/ 2009/09/156345.PHP P>
http://lists.boost.org/archives/boost/ 2009/09/156366.php p> boost_foreach_pair code> est une autre option qui fonctionne bien dans notre expérience: p>
Si vous avez besoin de itération sur une carte, le moyen le plus simple consiste à utiliser des tuples, car obtenir le type correct pour Typef, est gênant. Voici comment utiliser les tuples:
BOOST_FOREACH(tie(key, value), my_map) { ... } //This will work
La virgule entre la clé et la valeur va confondre le préprocesseur.
@Ferruccio La virgule entre la clé et la valeur sera pas i> b> confondre le pré-processeur en raison de la parenthèse autour de la clé et de la valeur. De plus, je le fais tout le temps quand j'ai besoin de faire une carte.
Je n'avais aucune idée que vous pouviez faire cela avec le pré-processeur.
Ceci peut être aussi simple que ceci: à l'aide de la norme C ++ 11, automatique est comme VaR en C #, il fera P> BOOST_FOREACH(std::pair<int, double>& p, my_map) { ... }