97 votes

Comment déclarer une fonction qui accepte un lambda?

J'ai lu sur Internet de nombreux tutoriels expliquant comment utiliser lambdas avec la bibliothèque standard (tels que std::find ), et ils étaient tous très intéressants, mais je n'ai trouvé aucun qui explique comment utiliser un lambda pour mes propres fonctions.

Par exemple:

 int main()
{
    int test = 5;
    LambdaTest([&](int a) { test += a; });

    return EXIT_SUCCESS;
}
 

Comment dois-je déclarer LambdaTest ? Quel est le type de son premier argument? Et ensuite, comment puis-je appeler la fonction anonyme lui passant, par exemple, "10" comme argument?

87voto

doublep Points 9701

Si vous ne souhaitez pas tout modéliser, vous pouvez procéder comme suit:

 void LambdaTest (const std::function <void (int)>& f)
{
    ...
}
 

85voto

sepp2k Points 157757

Étant donné que vous souhaitez probablement également accepter les pointeurs de fonction et les objets fonction en plus de lambdas, vous souhaiterez probablement utiliser des modèles pour accepter tous les arguments avec operator() . C’est ce que les fonctions std aiment trouver. Cela ressemblerait à ceci:

 template<typename Func>
void LambdaTest(Func f) {
    f(10);
}
 

Notez que cette définition n'utilise aucune fonctionnalité c ++ 0x, elle est donc totalement compatible avec les versions antérieures. Seul l'appel à la fonction utilisant des expressions lambda est spécifique à c ++ 0x.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X