У меня есть контейнер указателей, который я хочу перебрать, вызывая функцию-член, у которой есть параметр, который является ссылкой. Как мне это сделать с STL?
Мое текущее решение - использовать для параметра boost :: bind и boost :: ref.
// 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)
);
Смежный вопрос (из которого я получил свое текущее решение): boost :: bind с функциями, параметры которых являются ссылками . Это конкретно спрашивает, как сделать это с наддувом. Я спрашиваю, как это будет сделано без повышения.
Редактировать : Есть способ сделать то же самое, не используя boost
. Используя std::bind
и друзей, один и тот же код можно написать и скомпилировать в C ++ 11-совместимый компилятор, например:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);