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 :

Fonction "prédicat" dans une fonction ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Par défaut Fonction "prédicat" dans une fonction ?
    Bonjour a tous,

    J'ai besoin d'utiliser un prédicat pour fixer la valeur d'un element dans une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void				
    TGrid::Set_Anchor_Squares_Not_Played( void )
    {
    	std::for_each(	m_po_configuration->Get_Anchor_Squares().begin(), 
    			      m_po_configuration->Get_Anchor_Squares().end(),
    			      Set_Not_Played ) ;
    }
    Le prédicat en question est Set_Not_Played.

    Pour le moment, ce prédicat est une fonction propre à ma classe (TGrid) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void 
    TGrid::Set_Not_Played( TAnchorSquare* par_po_anchor_square )
    {
    	par_po_anchor_square->Set_Played( false ) ;
    }
    Mais pour des questions d'esthétique (ou juste pour savoir) je voudrais contraindre la portée de cette fonction, non pas à ma classe, mais seulement à ma fonction TGrid::Set_Anchor_Squares_Not_Played. Or, quand je mets ma fonction prédicat dans cette fonction, ca ne compile pas.
    Comment faudrait-il que je fasse ?
    En fait, je voudrais un peu le meme fonctionnement qu'un foncteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    FONCTION()
    {
         struct foncteur
         {
             operator()()
             {
     
             }
         }
     
         std::generate( x.begin(), x.end(), foncteur() );
    }
    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Par défaut
    D'ailleurs en fait j'avais pas vu mais ca ne marche pas du tout mon truc !

    std::for_each( m_po_configuration->Get_Anchor_Squares().begin(),
    m_po_configuration->Get_Anchor_Squares().end(),
    Set_Not_Played ) ;

    Me donne
    error C3867: &'TGrid::Set_Not_Played' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'TGrid::Set_Not_Played' pour créer un pointeur vers membre

    et TGrid::Set_Not_Played idem.

    Si vous avez un indice svp avant de répondre a ma précédente question ? merci !

    Alex

  3. #3
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Si ta fonction TGrid::Set_Not_Played était static, tu aurais pu faire ton for_each.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Par défaut
    Et il n'y aurait pas moyen d'ajouter un "mem_fun" pour oublier le fait qu'elle doive etre statique ? Genre std::mem_fun(&TGrid::Set_Not_Played) ?

    Merci

  5. #5
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Si, associé avec un std::bind1st dans le cas présent.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Mieux vaut utiliser boost::bind.

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

Discussions similaires

  1. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  2. une fonction pour le bgcolor dans une datatable
    Par ghnawfal dans le forum JSF
    Réponses: 2
    Dernier message: 09/04/2008, 13h33
  3. Déclarer une fonction ayant 2 prototypes dans une DLL
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 17/02/2007, 12h00
  4. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51

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