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 :

tableau de fonction membre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut tableau de fonction membre
    J'aimerais faire une map qui me permette sur un objet de ma classe d'appeller une fonction membre via un index.

    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
    
    typedef unsigned char* pixel;
    typedef void (compressor) (pixel&);
    // map COMP => Fonction de compression
    typedef map<unsigned int, compressor> compresseursType;
    
    [...]
    
    class COVReaderEngine {
    
    	[...]
    
    	void setCompressor(unsigned int num, compressor comp);
    	// pixel _access : accès en mémoire où doivent être écrit les pixels
    	void compresseur_000(pixel &_acess);
    
    	[...]
    
    }
    
    COVReaderEngine::COVReaderEngine(const char* s) {
    
    	[...]
    
    	setCompressor(0, compresseur_000);
    
    	[...]
    
    }
    Mais je n'y arrive pas.

    CF :

    f:\program files\avisynth 2.5\avisynth_256_src\avsdll\cov001.cpp(181) : error C3867: &'COVReaderEngine::compresseur_000' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'COVReaderEngine::compresseur_000' pour créer un pointeur vers membre
    Comment faire ? (j'espère qu'au pire des cas il existe une alternative plus orientée objet que l'utilisation d'un switch)

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    On ne peut pas mélanger les pointeurs de fonctions et les pointeurs de fonction membre. Cf. la faq http://c.developpez.com/faq/cpp/?pag...onction_membre

  3. #3
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Pour jouer avec des fonctions, je te conseillerai de regarder du coté de boost::function et boost::bind. C'est vraiment trés pratique.

    Y'a aussi boost::lambda mais c'est un peu plus compliqué...

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Je vais plutôt utiliser une classe interne alors.

  5. #5
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    un petit exemple :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    ...
    #include <boost/function.hpp>
    #include <boost/bind.hpp>
    ...
     
    class Truc {
      public:
        Truc() {};
        ~Truc() {};
     
      void setFunc0(boost::function<void(int, double, std::string)> myFunc0) {
        _myFunc0 = myFunc0;
      }
     
      void uneMethodeQuiUtiliseLaFonctionCallBack(...) {
        if( _myFunc0 )
          _myFunc0(10, 0.2, "toto");
      };
      ...
     
      protected:
        boost::function<void(int, double, std::string)> _myFunc0;
     
      ...
    };
     
    class Machin {
      public :
        Machin() { 
          _myTruc.setFunc0(boost::bind(&Machin::uneSuperFonctionMembre, this, _1, _2, _3));
        };
        ~Machin() {};
     
      protected :
        void uneSuperFonctionMembre(int i, double d, std::string s) {
          ...
        };
     
      Truc _myTruc;
      ...
    };
    C'est bien ce que tu veux faire ou j'ai pas compris ? Ce qui n'est pas impossible, ces dernier temps je comprend pas mal de travers C'est certainement due au faite que mes vacances sont à la fin de la semaine

    Petits liens :

    http://www.boost.org/doc/html/function.html

    http://www.boost.org/libs/bind/bind.html

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Sinon, pour faire fonctionner ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Définition du type de tes fonctions membres
    typedef void (COVReaderEngine::*compressor) (pixel&);
     
    // Affectation d'une fonction membre
    setCompressor(0, &COVReaderEngine::compresseur_000);
     
    // Appel
    (this->*le_pointeur_fonction)(les_pixels);

Discussions similaires

  1. typedef avec fonction membre
    Par socrate dans le forum C++
    Réponses: 11
    Dernier message: 23/05/2005, 20h54
  2. Switch dans fonction membre
    Par Raish dans le forum C++
    Réponses: 11
    Dernier message: 30/03/2005, 14h41
  3. Réponses: 10
    Dernier message: 03/02/2005, 13h09
  4. Réponses: 5
    Dernier message: 12/01/2005, 20h58
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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