Параметр обратного вызова для лямбд и функций-членов - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть эта функция:

void func(boost::function<void(float)> cb){
//do something with cb()
}

Работает с лямбдами и функциями.Но это не позволяет мне передавать функцию-член или лямбду, определенную в функции-члене.

Я попытался разыграть что-то вроде этого:

void class::memberFunc() {
void func((void(*)(float))([](float m){}));
}

Но похоже, что лямбда игнорируется при вызовахИ понятия не имею, как передать функцию-член.

1 Ответ

1 голос
/ 22 апреля 2011

Дано:

struct T {
   T(int x) : x(x) {};
   void foo() {
      std::cout << x;
   }

   int x;
};

Указатель объекта является неявным первым параметром для функций, и это становится явным при работе с boost::function.

Вы можете "скрыть" его от func, связав его рано:

void func(boost::function<void()> cb) {
   cb();
}

int main() {
   T t(42);
   func(boost::bind(&T::foo, &t));
}

Или иначе вы можете связать его поздно:

T t(42);

void func(boost::function<void(T*)> cb) {
   cb(&t);
}

int main() {
   func(boost::bind(&T::foo, _1));
}

Посмотрите, как это работает здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...