22

ラムダ式内でクラスのメソッドを呼び出したい:

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オブジェクトへの参照をキャプチャします。

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

または、ラムダがthencaptureのメソッドにあることを意味するmy_class場合this。または、静的メソッドの場合はmy_class::my_method(obj)、以下で説明するbames53のように、何もキャプチャせずに呼び出すことができます。

于 2012-07-01T17:16:03.927 に答える