Подтвердить что ты не робот

Метод вызова внутри выражения лямбда

Я хочу вызвать метод моего класса внутри выражения лямбда:

void my_class::my_method(my_obj& obj)
{
}


void my_class::test_lambda()
{ 
   std::list<my_obj> my_list;

   std::for_each(my_list.begin(), my_list.end(), [](my_obj& obj)
   {
      // Here I want to call my_method:
      // my_method(obj);
   });
}

Как я могу это сделать?

4b9b3361

Ответ 1

Вам нужно записать this, явно или неявно:

std::for_each(l.begin(), l.end(),
    [this](my_obj& o){ // or [=] or [&]
      my_method(o); // can be called as if the lambda was a member
    });

Ответ 2

Вы не можете вызвать нестатический метод без вызова объекта.

Создайте объект my_class и запишите ссылку на него в lambda...

my_class x;

std::for_each(my_list.begin(), my_list.end(), [&x](my_obj& obj)
//                                            ^^^^
{
    // Here I want to call my_method:
    x.my_method(obj);
});

Или, если вы имели в виду, что лямбда была в методе my_class, тогда запишите this. Или, если это статический метод, вы можете вызывать my_class::my_method(obj) без записи чего-либо, например, bames53, упомянутого ниже.