Ответ 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
});
Я хочу вызвать метод моего класса внутри выражения лямбда:
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);
});
}
Как я могу это сделать?
Вам нужно записать 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
});
Вы не можете вызвать нестатический метод без вызова объекта.
Создайте объект 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, упомянутого ниже.