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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 28
    Points
    28
    Par défaut CALLBACKS : stocker l'adresse d'une fonction membre et l'appeler plus tard [je trouve pas - deviens dingue]
    Bonsoir à tous, ma compréhension des templates oscille entre 1% et 2% de l'affaire selon les jours :-)
    Il y a quelque chose que je cherche désespérément à réaliser, sans succès. J'ai eu beau chercher partout, je ne pige pas.

    Donc, on imagine un pseudo code comme ça :

    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
     
    class Media {
     
      enum names { velocity, volume, tagada }
     
      void setProperty(int prop_name, float value);
      void setProperty(int prop_name, int value);
      void setProperty(int prop_name, vector3 value);
      void setProperty(int prop_name, vector2 value);
      void setProperty(int prop_name, trucmuche value);
    }
     
    class Control {
      vector<Media> medias;
      void registerCallback(adresse_fonction) {
        medias.push_back(adresse_fonction);
      }
      void update() {
        // parcourir les éléments du vector medias et appeler la fonction avec un valeur arbitraire (valeur du paramètre value)
      }
    }
     
    main() {
      Control c;
      Media m;
      c.registerCallback(&Media.setProperty(Media::velocity, float));
      c.registerCallback(&Media.setProperty(Media::volume, int));
      c.update();
    }
    Je n'arrive pas à trouver une solution pour passer la fonction de Media à Control, je ne sais pas la stocker et je ne sais pas l'appeler. Très concrètement, je ne sais pas le dire en C++
    J'ai regardé <functional>, donc bind, function etc etc mais ça me dépasse

    On dit "Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours."

    Franchement, donnez moi un poisson parce que je risque de passer quelques années à essayer de comprendre comment fonctionne la cane à pêche

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Les codes d'exemple de http://en.cppreference.com/w/cpp/uti...ional/function ne t'aident pas ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Ha j'avais pas trouvé cette page... Je vais peut-être m'en sortir avec ça !

    Merci !

Discussions similaires

  1. [Free Pascal] Enregistrer une fonction callback depuis une fonction membre
    Par EpiTouille dans le forum Free Pascal
    Réponses: 3
    Dernier message: 11/03/2015, 11h11
  2. Réponses: 3
    Dernier message: 23/12/2010, 02h08
  3. Réponses: 2
    Dernier message: 13/09/2010, 10h55
  4. Réponses: 15
    Dernier message: 24/08/2010, 10h56
  5. Problème d'adresse d'une fonction membre
    Par ens-lyon dans le forum Débuter
    Réponses: 1
    Dernier message: 11/09/2009, 10h05

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