22

我想在 lambda 表达式中调用我的类的方法:

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

我能怎么做?

4

2 回答 2

43

您需要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
    });
于 2012-07-01T17:16:57.063 回答
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);
});

或者,如果您的意思是 lambda 在my_classthen capture的方法中this。或者,如果它是一个静态方法,那么您可以my_class::my_method(obj)在不捕获任何内容的情况下调用,如下面的 bames53 所述。

于 2012-07-01T17:16:03.927 回答