73 votes

Comment fonctionne std :: function

Vous savez, nous pouvons conclure ou de stocker une fonction lambda à un std::function:

#include <iostream>
#include <functional>
int main()
{
    std::function<float (float, float)> add = [](float a, float b)
    //            ^^^^^^^^^^^^^^^^^^^^
    {
        return a + b;
    };

    std::cout << add(1, 2) << std::endl;
}

Ma question est autour de std::function, comme vous pouvez le voir c'est une classe de modèle, mais il peut accepter n'importe quel type de fonction de signature.

Par exemple float (float, float) dans cette forme, return_value (first_arg, second_arg).

Quelle est la structure de l' std::function et comment faut-il accepter une signature de fonction comme x(y,z) et comment il fonctionne? Est - float (float, float) une nouvelle expression valide en C++?

123voto

R. Martinho Fernandes Points 96873

Il utilise une technique d’effacement de type.

Une possibilité consiste à utiliser le polymorphisme de sous-type de mélange avec les modèles. Voici une version simplifiée, juste pour donner une idée de la structure globale :

(Note que j’ai oublié plusieurs choses par souci de simplicité : il ne peut pas être copiés et peut-être d’autres problèmes, n’utilisez pas ce code dans le code réel)

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