std for each



Автор Булат 1 задал вопрос в разделе Другие языки и технологии

Передать функтор по ссылке в std::for_each и получил лучший ответ

Ответ от Ra[гуру]
Почему обхитрить? Если нужно, то можно.
Современные плюсы (С++11) предлагают менее извращенные решения, но можно и поизвращаться:
WeightedHand copy[10];
---
float sum = 0;
struct Summarizer {
float *sum;
Summarizer(float *p): sum(p) {}
void operator () (const WeightedHand &v) { *sum += v.weight; };
} ssum(&sum);
std::for_each(copy, copy + 10, ssum);
---
struct Summarizer {
float operator()(float result, WeightedHand &op) { return result + op.weight; }
} summarizer;
float sum = std::accumulate(copy, copy + 10, 0.0f, summarizer);
---
C++11:
float sum = 0;
std::for_each(copy, copy + 10, [&sum](WeightedHand &e){ sum += e.weight; });
---
float sum = 0;
for (auto e : copy) sum += e.weight;
---
float sum = std::accumulate(begin(copy), end(copy), 0.0f, [](float r, WeightedHand &o) { return r + o.weight; });
ra
Высший разум
(108783)
> можно ли именно в std::for_each и др. алгоритмы передать ссылку на функтор.
Специализировать шаблон, как это сделали вы в своем примере. По другому никак, полагаю. Можно обертку написать для нужного алгоритма:
template<class It, class Fn>
void for_each_ref_func(It first, It last, Fn& func) { std::for_each<It, Fn&>(first, last, func); }
...
for_each_ref_func(copy, copy + 10, sum);

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Передать функтор по ссылке в std::for_each
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*