Вызов функции-члена с данными члена с использованием for_each - PullRequest
3 голосов
/ 17 ноября 2010

Дорогие все, я хотел бы вызвать функцию-член (которая ожидает ссылку) для каждого объекта (скажем) вектора, который является членом того же класса, как показано в следующем коде:

#include <functional>  
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

struct Stuff {
  double x;
};

class Test {
public:
  void f1(Stuff & thing);
  void f2(void);
  vector<Stuff> things;
};

void Test::f1(Stuff & thing) {
  ; // do nothing
}

void Test::f2(void) {
  for_each(things.begin(), things.end(), f1);
}

int main(void)
{

  return 0;
}  

Этот код дает мне ошибку компилятора, связанную с неразрешенной перегруженной функцией типа . Я пробовал также с bind, но кажется, что реквизиты ссылок в f1 - это одна проблема. Я знаю, что упускаю что-то важное здесь, поэтому я пользуюсь этой возможностью, чтобы решить мою проблему и учиться. На данный момент я не могу установить boost, но я хотел бы знать также, полезно ли boost для решения этой проблемы. Заранее спасибо.

1 Ответ

4 голосов
/ 18 ноября 2010
  • Функция, которую вы хотите вызвать, не может быть просто идентифицирована как f1, но должна называться &Test::f1 (как в: функции-члене f1 класса Test)
  • Функция f1 не принимает ни одного аргумента: как любая нестатическая функция-член, она имеет неявный параметр this типа Test * const
  • Наконец, стандартная привязка не сможет справиться с задачей, поскольку она не обрабатывает параметры, переданные по ссылке.

Boost.Bind действительно будет отличным вариантом:

std::for_each(things.begin(), things.end(), boost::bind(&Test::f1, this, _1));
...