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

SL & STL C++ Discussion :

for_each et appel fonction membre


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut for_each et appel fonction membre
    Voici mon code :

    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
    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    class A
    {
        public:
            void func1(const std::vector<int> &v) 
                {std::for_each(v.begin(), v.end(), func2); }
            void func2(int val) { /* Traitement */ }
    };
     
    int main()
    {
        A a;
        std::vector<int> v;
     
        v.push_back(7);
        v.push_back(3);
        v.push_back(28);
     
        a.func1(v);
        return 0;
    }
    J'aimerais faire appel à func2, mais ça ne marche pas. Normal, car ce n'est pas une fonction traditionnelle, mais une fonction membre.

    J'essaie de faire appel à mem_func_ref, mais ça ne marche pas non plus

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Par défaut
    Salut,

    mem_fun ne permet pas de faire ce que tu veux. Regarde du côté de boost::bind.

    [EDIT]
    Tu peux aussi utiliser std::bind1st et std::mem_fun1_t mais c'est un peu lourdingue.
    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
    class A
    {
    public:
      void func1(const std::vector<int> &v)
      {
        std::for_each(v.begin(), v.end(), std::bind1st(std::mem_fun1_t<void, A, int>(&A::func2), this));
      }
      void func2(int val)
      {
        std::cout << val << std::endl;
      }
    };
     
    int main()
    {
      A a;
      std::vector<int> v;
     
      v.push_back(7);
      v.push_back(3);
      v.push_back(28);
     
      a.func1(v);
     
      return 0;
    }

  3. #3
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Merci beaucoup, ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel non conforme d'une fonction membre non static
    Par kryptong dans le forum Débuter
    Réponses: 3
    Dernier message: 16/04/2012, 17h00
  2. appel a une fonction membre sur un non-object
    Par totensai dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2012, 22h43
  3. Réponses: 5
    Dernier message: 13/07/2011, 18h56
  4. Réponses: 1
    Dernier message: 29/06/2010, 22h24
  5. Réponses: 10
    Dernier message: 31/03/2010, 23h34

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