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

C++ Discussion :

Callback en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 39
    Par d�faut Callback en C++
    Bonjour,

    J'ai une petite question pour vous : comment on fait en C++ pour faire des callback ? J'ai vu ce lien tout a l'heure : https://www.developpez.net/forums/bl...-cpp-deprecie/ mais l'auteur pr�cise que c'est d�pr�ci�, donc actuellement quels sont les moyens pour faire un callback ?

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    D�pr�ci� mais toujours fonctionnel.
    Et puis simplement avec la virtualit� aussi.
    Sinon std::function.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 39
    Par d�faut
    Merci Bousk pour ta r�ponse, std::function semble correspondre � mes besoins en parti du moins. En fait, dans l'exemple que donne cppreference, on conna�t le nom de la fonction (je comprends donc pas alors l'utilit� de ne pas l'appeler directement pour le coup).

    Moi dans mon besoin, j'aurais besoin de ne pas conna�tre � l'avance la m�thode ou fonction � appeler. En fait je t'explique, dans ma folie d'apprentissage, je voudrais concevoir un moteur de jeu bas� sur la SFML, avec des syst�mes afin de rendre plus facile l'utilisation de la SFML comme par exemple ne pas devoir cr�er la boucle sf::Event par exemple, c'est le moteur qui g�rerait �a et pour ajouter les �v�nements justement, il n'y aurait qu'un "add" � faire et lui passer en param�tre le nom de la fonction (ou de la m�thode) � utiliser, afin que la m�thode "add" puisse justement faire appel � ce fameux callback, un peu comme je le ferais en PHP ou JavaScript.

    L� pour std::function, on passe pas le nom de la m�thode comme �tant une cha�ne de caract�re mais directement son nom normal, comme si on l'appelait directement ce qui au final n'a pas grand int�r�t je trouve. Moi j'ai besoin de pouvoir comme en PHP passer en param�tre � la dite fonction/m�thode (en cha�ne de caract�re) le nom de la m�thode � appeler.

    En clair, je cherche un �quivalent au call_user_func_array de PHP ou pouvoir faire comme en PHP, c'est � dire pouvoir utiliser le contenu d'une variable comme si c'�tait le nom de la m�thode � appeler. Genre en PHP tu as une variable $class par exemple, tu peux faire : $object = new $$class() pour instancier l'objet et : $object->$$method() pour appeler la m�thode (dans mon exemple les deux ont �t� fournis en param�tre donc variable $class et variable $method).


    L'avantage ici, c'est qu'on conna�t r�ellement pas le nom de ce qu'on doit appeler, et soit avec le call_user_func_array (mais il fait pas l'instanciation de la classe, donc je recommande moyen l'usage de cette fonction PHP si on a pas d�j� cr�er une instance de la classe) dont les param�tres vont �tre la classe et la m�thode, soit faire l'instanciation et l'appel directement depuis des variables ; dans tout les cas, on a des inconnues qui sont remplies par des cha�nes de caract�res.


    J'esp�re que mon explication est assez claire.

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Citation Envoy� par christophedlr Voir le message
    En fait, dans l'exemple que donne cppreference, on conna�t le nom de la fonction (je comprends donc pas alors l'utilit� de ne pas l'appeler directement pour le coup).
    Faut aller plus loin que le premier exemple

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    std::function<void()> f_display_42 = []() { std::cout<<42<<std::endl; };
        f_display_42();
    O� tu vois une fonction connue ici ?

    Oublie PHP, tu fais du C++.
    Appeler une fonction d'apr�s son nom, c'est plus du scripting. C'est possible, mais loin d'�tre facile. Donc oublie cette voie.
    Ce que tu veux c'est std::function, ou une interface � h�riter.

    Apr�s si tu ne sais pas faire �a ou ne comprends pas ces simples choses, c'est que c'est au-del� de tes comp�tences actuelles.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par d�faut
    Bonjour,

    Citation Envoy� par christophedlr Voir le message
    Moi j'ai besoin de pouvoir comme en PHP passer en param�tre � la dite fonction/m�thode (en cha�ne de caract�re) le nom de la m�thode � appeler.
    �a, ce n'est pas vraiment un besoin. C'est plut�t un moyen parmi d'autres qui t'es venu � l'esprit pour r�pondre � ce besoin.

    � la place, ce que tu peux faire, c'est encapsuler dans ton �v�nement un std::function<void()>.
    Si tu as un objet foo qui a une m�thode bar, alors tu peux cr�er un std::function<void()> qui ex�cutera foo.bar(). En effet, on fait comme ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::function<void()> fn = [&]() { foo.bar(); };
    Attention, dans mon exemple, le lambda capture foo par r�f�rence, donc il faut faire attention � ce que foo existe toujours quand on a envie d'appeler fn().

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 39
    Par d�faut
    Merci pour ta r�ponse Pyramidev, je testerai �a d�s que j'ai le temps (h�las peut en ce moment :'().

  7. #7
    Membre tr�s actif
    Avatar de smarlytomtom
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Novembre 2014
    Messages
    139
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comt�)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 139
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par christophedlr Voir le message
    Bonjour,

    J'ai une petite question pour vous : comment on fait en C++ pour faire des callback ? J'ai vu ce lien tout a l'heure : https://www.developpez.net/forums/bl...-cpp-deprecie/ mais l'auteur pr�cise que c'est d�pr�ci�, donc actuellement quels sont les moyens pour faire un callback ?
    Bonjour Christophe !

    J'ai pass� mon billet en d�pr�ci� une fois que le standard std::function est apparu ! La m�thode d�crite dans le billet est utilis� en C, et l'est �galement en C++. En effet elle est toujours fonctionnelle mais il faut mieux suivre les standard ! Surtout que ce standard est suivi de l'apparition des fonction lambda.

    Si tu as d'autres questions n'h�sites pas !

    NB : J'ai mit � jour le titre du billet pour pr�ciser qu'elle est toujours fonctionnelle et �viter les confusions.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Fonction callback
    Par saibe dans le forum Linux
    R�ponses: 4
    Dernier message: 19/01/2012, 10h41
  2. [D�butant] fonction CALLBACK
    Par tlt dans le forum MFC
    R�ponses: 2
    Dernier message: 29/10/2004, 16h55
  3. Callback
    Par el_diablos dans le forum Langage
    R�ponses: 2
    Dernier message: 09/07/2004, 08h48
  4. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    R�ponses: 8
    Dernier message: 02/03/2004, 11h42
  5. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    R�ponses: 3
    Dernier message: 18/02/2004, 16h04

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