• [^] # Re: simple ?

    Posté par . En réponse au journal Rust en version 0.12. Évalué à 2.

    J’ai bien aimé la blague ;-) donc en C++ :

    int twice(int x, int (*f)(int))
    {
     return f(x) + f(x);
    }
    int main() {
     int (*square)(int) = [] (int x) { return x * x; } ;
     twice(5,square);
     return 0;
    }

    Avec des types génériques :

    template <class T> T twice(const T& x, T (*f)(const T&))
    {
     return f(x) + f(x);
    }
    template <class T> T square(const T& x)
    {
     return x*x;
    }
    int main() {
     twice(5,square); // Évalué à 50
     twice(5.0,square); // Évalué à 50.0
     return 0;
    }

    Je n’ai pas essayé à faire une lambda template. Les objets de type T pouvant devenir gros, j’ai décidé de passer les paramètres par référence, pour préciser au compilateur que l’objet ne serait pas modifié, j’ai ajouté const. Ce que je n’ai pas fait sur le premier exemple avec des paramètres par copie.