2012-07-01 7 views
12

Quiero llamar a un método de mi clase dentro de una expresión lambda:método de llamadas dentro de la expresión 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); 
    }); 
} 

¿Cómo puedo hacer?

+0

detalles. ¿Dónde está el código for_each, en otra función miembro de my_class? ¿My_method es una función estática o no estática? Si no es estático y 'for_each' no está en una función miembro my_class, ¿a qué instancia quieres llamar my_method? ¿Importa? – bames53

+0

for_each está dentro de otra función miembro no estática de my_class. ¿Por qué downvote? – gliderkite

+0

porque la pregunta no está clara como está escrita. – bames53

Respuesta

25

lo necesario para capturar this, ya sea explícita o implícitamente: se necesitan

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

suponiendo que lambda se usa desde una función miembro de my_class. La pregunta no es lo suficientemente específica como para decir si este es el caso. – bames53

+4

@bames: Creo que sí, el comentario dentro de la lambda indica que debería llamarse 'my_method (o)', pero puedo ver de dónde vienes. – Xeo

1

No puede llamar a un método no estático sin un objeto para invocarlo.

hacer un objeto my_class y capturar una referencia a él en el 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); 
}); 

O, si nos referimos al lambda era en un método de my_class luego capturar this. O, si se trata de un método estático, puede llamar al my_class::my_method(obj) sin capturar nada, como bames53 a continuación.

+0

y si es un método estático, puede llamarlo sin una instancia: '[] (my_obj & obj) {my_class :: my_method (obj); } ' La pregunta no es lo suficientemente específica como para saber si es estática o no. – bames53

Cuestiones relacionadas