У меня есть контейнер указателей, который я хочу перебрать, вызывая функцию-член, которая имеет параметр, который является ссылкой. Как мне это сделать с STL?std :: for_each, вызывающая функция-член с ссылочным параметром
Мое текущее решение - использовать 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 with functions that have parameters that are references. Это специально спросит, как это сделать с повышением. Я спрашиваю, как это будет сделано без boost.
Редактировать: Существует способ сделать то же самое без использования boost
. Используя std::bind
и друзей и тот же код может быть написан и составлен в 11-совместимый компилятор C++, как это:
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)), вероятно, должен быть boost :: bind (& Renderable :: render, boost :: ref (g), _1) – Carl
@ carleeto Хорошо поймать. Исправлено через 4 года неправильного! –