2012-07-01 2 views
12

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

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); 
    }); 
} 

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

+0

детали. Где код for_each, в другой членной функции my_class? Является ли my_method статической или нестатической функцией? Если он не является статичным и 'for_each' не находится в функции члена my_class, тогда какой экземпляр вы хотите вызвать my_method? Это имеет значение? – bames53

+0

Параметр for_each находится внутри другой нестатической функции-члена my_class. Почему downvote? – gliderkite

+0

, потому что вопрос не ясен, как написано. – bames53

ответ

25

Вы должны захватить 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 
    }); 
+0

Предполагая, что лямбда используется из функции-члена my_class. Вопрос не достаточно конкретный, чтобы сказать, так ли это. – bames53

+4

@bames: Я думаю, что комментарий внутри лямбды указывает, что его следует называть «my_method (o)», но я вижу, откуда вы. – Xeo

1

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

Сделать my_class объект и захватить ссылку на него в лямбда ...

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, как показано ниже.

+0

, и если это статический метод, вы можете вызвать его без экземпляра: '[] (my_obj & obj) {my_class :: my_method (obj); } '. Вопрос не достаточно конкретный, чтобы мы знали, статичен он или нет. – bames53

Смежные вопросы