Tengo un contenedor de punteros sobre el que quiero iterar, llamando a una función miembro que tiene un parámetro que es una referencia. ¿Cómo hago esto con STL?std :: for_each, función de miembro llamante con el parámetro de referencia
Mi solución actual es usar boost :: bind, y boost :: ref para el parámetro.
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
Una cuestión relacionada (de la que Derivé mi solución actual desde) es boost::bind with functions that have parameters that are references. Esto específicamente pregunta cómo hacer esto con impulso. Me pregunto cómo se haría sin impulso.
Editar: Hay una manera de hacer lo mismo sin usar ningún boost
. Mediante el uso de std::bind
y amigos el mismo código puede ser escrito y compilado en un compilador compatible con 11 C++ así:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
boost :: bind (& Renderable :: render, _1, boost :: ref (g)) probablemente debería ser boost :: bind (& Renderable :: render, boost :: ref (g), _1) – Carl
@carleeto Bueno captura. ¡Reparado después de 4 años de estar equivocado! –