我想打电话给我的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);
});
}
我能怎么做?
您需要捕获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说。