λ表达式内呼叫的方法(Call method inside lambda expression)

2019-07-30 04:45发布

我想打电话给我的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);
   });
}

我能怎么做?

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


Answer 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说。



文章来源: Call method inside lambda expression
标签: c++ lambda c++11