¿Cómo puedo usar BOOST_FOREACH de manera eficiente (número de caracteres/facilidad de lectura) con un impulso :: ptr_map?Cómo usar BOOST_FOREACH con un impulso :: ptr_map?
Kristo demostró en su answer que es posible utilizar BOOST_FOREACH con un ptr_map, pero en realidad no me ahorra tener que escribir (o hace que mi código realmente más legible) de la iteración en la ptr_map con un iterador:
typedef boost::ptr_container_detail::ref_pair<int, int* const> IntPair;
BOOST_FOREACH(IntPair p, mymap) {
int i = p.first;
}
// vs.
boost::ptr_map<int, T>::iterator it;
for (it = mymap.begin(); it != mymap.end(); ++it) {
// doSomething()
}
El siguiente código está en algún lugar de la línea que deseo. Sigue la forma estándar de cómo usar BOOST_FOREACH con un std :: map. Desafortunadamente esto no se compila:
boost::ptr_map<int, T> mymap;
// insert something into mymap
// ...
typedef pair<int, T> IntTpair;
BOOST_FOREACH (IntTpair &p, mymap) {
int i = p.first;
}
Gracias Kristo, esto es lo que finalmente también ocurrió. Sin embargo, para esto hay que escribir tanto en typedef, que no es una abreviación real sobre el estándar para (ptr_map :: iterator it = mymap.begin(); it! = Mymap.end(); ++ it) {} más ... –
Martin
Estoy de acuerdo. Estoy interesado en ver si hay una forma más corta (¿mejor?) Para escribir ese tipodef. También debes considerar a tus compañeros de trabajo. ¿Cuántos de ellos dirán: "Escribiste un tipo de letra loco solo para permitirte usar BOOST_FOREACH? Solo escribe un ciclo for-break normal y listo". :) –