在lambda表达式中调用方法

gli*_*ite 16 c++ lambda c++11

我想在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);
   });
}
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

Xeo*_*Xeo 34

您需要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
    });
Run Code Online (Sandbox Code Playgroud)

  • @bames:我认为是,lambda中的注释表明它应该被称为`my_method(o)`,但我可以看到你来自哪里. (4认同)
  • @Xeo您可以使用别名来避免使用`this`变量“污染”所有作用域,如下所示:`[self = this]`,然后在lambda内部您需要显式引用您所使用的this变量/函数想要访问像:`self-&gt;my_method(o);`,我相信这是捕获`this`的更安全的方法,因为您总是需要明确的访问。 (2认同)