Pregunta

Tengo un contenedor de punteros sobre los que quiero iterar, llamando a una función miembro que tiene un parámetro que es una referencia.¿Cómo hago esto con STL?

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 pregunta relacionada (de la que derivé mi solución actual) es boost::bind con funciones que tienen parámetros que son referencias.Esto pregunta específicamente cómo hacer esto con impulso.pregunto como se haría sin aumentar.

Editar:Hay una manera de hacer lo mismo sin usar ningún boost.Mediante el uso std::bind y amigos, el mismo código se puede escribir y compilar en un compilador compatible con C++ 11 como este:

std::for_each(
  sprites.begin(),
  sprites.end(),
  std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
¿Fue útil?

Solución

Este es un problema con el diseño de <functional>. Tienes que usar boost :: bind o tr1 :: bind.

Otros consejos

Vea Cómo usar std :: foreach con parámetros / modificación . La pregunta muestra cómo hacerlo usando un bucle for. La respuesta aceptada da un ejemplo de cómo lograr esto con el algoritmo for_each.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top