Appel de méthode à l'intérieur d'expression lambda
Je veux appeler une méthode de ma classe à l'intérieur d'une expression 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);
});
}
Comment puis-je faire?
les détails sont nécessaires. Où est le for_each code, dans une autre fonction membre de my_class? Est my_method statique ou non statique de la fonction? Si elle n'est pas statique et
Le for_each est à l'intérieur d'un autre non-statique de la fonction de membre de my_class. Pourquoi downvote?
parce que la question n'est pas clair comme de l'écrit.
for_each
est pas dans un my_class fonction de membre de, alors quelle instance voulez-vous être l'appel de la my_method? Est-il question?Le for_each est à l'intérieur d'un autre non-statique de la fonction de membre de my_class. Pourquoi downvote?
parce que la question n'est pas clair comme de l'écrit.
OriginalL'auteur gliderkite | 2012-07-01
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour capturer
this
, que ce soit explicitement ou implicitement:Je pense que c'est le commentaire à l'intérieur de la lambda indiquer qu'il doit être appelé comme
my_method(o)
, mais je peux voir où vous venez de.Vous pouvez utiliser un alias pour éviter de "polluer" tout le champ avec le
this
variables comme ceci:[self = this]
, puis à l'intérieur de la lambda vous avez besoin de se référer explicitement à l'variables / fonctions que vous souhaitez accéder, comme:self->my_method(o);
, je crois que c'est un moyen plus sûr de capturer lethis
, depuis que vous avez toujours besoin d'être explicite pour l'accès.OriginalL'auteur Xeo
Vous ne pouvez pas appeler un non-statique méthode sans objet pour l'appeler.
Faire un
my_class
objet et de capturer une référence dans le lambda...Ou, si vous parliez de l'lambda est une méthode de
my_class
puis capturerthis
.Ou, si c'est une méthode statique, alors vous pouvez appeler
my_class::my_method(obj)
sans les capturer quoi que ce soit, comme bames53 dit ci-dessous.[](my_obj &obj) { my_class::my_method(obj); }
. La question n'est pas assez précis pour nous de savoir s'il est statique ou non.OriginalL'auteur David