std :: for_each, вызывающая функцию-член со ссылочным параметром

StackOverflow https://stackoverflow.com/questions/637441

  •  10-07-2019
  •  | 
  •  

Вопрос

У меня есть контейнер указателей, который я хочу перебрать, вызывая функцию-член, у которой есть параметр, который является ссылкой. Как мне сделать это с 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))
);
Это было полезно?

Решение

Это проблема дизайна <functional>. Вы должны использовать boost :: bind или tr1 :: bind.

scroll top