IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Passage de fonction en paramètre


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Passage de fonction en paramètre
    Bonjour,

    Je cherche à passer du code directement à une fonction. Est-ce possible en c++ (pour Arduino)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    …
    process({...});
    …
    Si oui, comment déclarer la fonction process?
    Merci

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Le plus simple est de prendre un argument template qui correspond à une fonction.
    Tu pourras passer une référence de fonction, un foncteur ou une lambda fonction (C++11).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
    // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main
     
    #include <iostream>
     
     
    template <class fct_t>
    void process(fct_t const & fct) { fct(); }
     
    class fonctor
    {
    public:
    	void operator()() const { std::cout << "Exécution de fonctor()" << std::endl; }
    };
     
    void fct() { std::cout << "Exécution de fct()()" << std::endl; }
     
     
    int main()
    {
    	process(fct);
     
    	process(fonctor());
     
    	#if __cplusplus > 199711L
    	process([]() -> void { std::cout << "Exécution de la lambda fonction" << std::endl; });
    	#endif
     
    	return 0;
    }
    Le programme affiche (C++98 & C++11) :
    $ g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main
    Exécution de fct()
    Exécution de fonctor()()

    $ g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
    Exécution de fct()
    Exécution de fonctor()()
    Exécution de la lambda fonction
    Edit : Ça fonctionne aussi avec std::function.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Il ne veut pas passer une fonction, il veut passer du code.
    Ce qui est impossible en Python (mais possible en C++).

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par oodini Voir le message
    Il ne veut pas passer une fonction, il veut passer du code.
    Ce qui est impossible en Python (mais possible en C++).
    (Tu as inversé Python et C++ dans ton explication ?)

    Passer du code ou une lambda fonction qui attrape tout par référence : il y a juste une (très légère) différence de syntaxe.
    En C++98, il faut créer un foncteur qui prend des références sur les variables nécessaires dans le constructeur, c'est plus lourd.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Sur Arduino, cela ne fonctionne pas. Merci pour vos interventions.

  6. #6
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Un foncteur ne fonctionne pas sur Arduino ? Une référence de fonction non plus ?
    Sinon, pointeur de fonction comme en C...

Discussions similaires

  1. Passage de fonctions comme paramètres
    Par Snyper dans le forum Scala
    Réponses: 4
    Dernier message: 31/01/2013, 17h16
  2. Passage de fonction en paramètre d'une fonction.
    Par Berzerk_ dans le forum C++
    Réponses: 9
    Dernier message: 04/06/2007, 13h31
  3. Passage de fonction en paramètre
    Par optalix dans le forum Fortran
    Réponses: 3
    Dernier message: 01/02/2007, 12h31
  4. [VB]Passage de Fonction en paramètre (d'une autre fonction)
    Par Australia dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 21/03/2006, 18h55
  5. [FLASH 8] Pb passage d'une fonction en paramètre
    Par segphault dans le forum Flash
    Réponses: 2
    Dernier message: 17/02/2006, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo