que tienen una macro 'foreach' utilizo con frecuencia en C++ que funciona para la mayoría de los contenedores STL:"valores foreach" macro en gcc y CPP
#define foreach(var, container) \
for(typeof((container).begin()) var = (container).begin(); \
var != (container).end(); \
++var)
(Tenga en cuenta que 'typeof' es una extensión de gcc). Se usa así:
std::vector<Blorgus> blorgi = ...;
foreach(blorgus, blorgi) {
blorgus->draw();
}
Me gustaría hacer algo similar que itere sobre los valores de un mapa. Llámalo "foreach_value", tal vez. Así que en lugar de escribir
foreach(pair, mymap) {
pair->second->foo();
}
me gustaría escribir
foreach_value(v, mymap) {
v.foo();
}
no puedo llegar a una macro que hacer esto, ya que requiere declarar dos variables: el iterador y la variable de valor (' v ', arriba). No sé cómo hacer eso en el inicializador de un ciclo for, incluso usando extensiones gcc. Podría declararlo justo antes de la llamada foreach_value, pero luego entrará en conflicto con otras instancias de la macro foreach_value en el mismo ámbito. Si pudiera ponerle un sufijo al número de línea actual al nombre de la variable del iterador, funcionaría, pero no sé cómo hacerlo.
¡Perfecto! Pero no entiendo lo de hacer un objeto extra. var es un puntero. ¿Tuviste una versión anterior que usó un valor? Y var podría convertirse en una referencia con otro ciclo más (más interno): for (typeof (...) var = * ptr; ptr; ptr = NULL). ¿Te importa actualizar con eso? – sfink