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 :

comment utiliser les foncteurs


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut comment utiliser les foncteurs
    bonjour!!

    j ai vu ds la faq a quoi servent les foncteurs

    mais je ne vois pas comment les utiliser??

    je voudrais ecrire moi meme une fonction qui recoit un foncteur et une list et qui m affiche tt les objets de ma liste qui corespondent au criteres du foncteurs??

  2. #2
    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
    Un foncteur est un objet pouvant avoir n'importe quel type (puisqu'en g�n�ral une classe = un foncteur), donc niveau d�claration �a donnera ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    template <typename F>
    void Fonction(F Foncteur);
    Ensuite, un foncteur �tant un objet agissant de la m�me mani�re qu'une fonction, il suffit de faire un appel � celui-ci avec l'op�rateur () :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    template <typename F>
    void Fonction(F Foncteur)
    {
        Foncteur(/* paramètres /*);
    }

  3. #3
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut
    la faq:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      // Tri selon leur numéro 
       std::sort(v.begin(), v.end(), SortByNumber());
    puisque SortByNumber est un struct, il ne doit pas etre instance pour etre utiliser??

    comment se passage fonctionne?
    je ne comprends pas trop!!

    peut on definir ns meme des pointeurs vers fonctions??

  4. #4
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut
    peux tu stp completer ton exemple, je n ai pas saisi!!

  5. #5
    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
    Oui, on passe bien une instance.

    Ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::sort(v.begin(), v.end(), SortByNumber());
    Est �quivalent � :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    SortByNumber Fonc;
    std::sort(v.begin(), v.end(), Fonc);
    Sauf que c'est plus court et certainement plus optimis�.

    peut on definir ns meme des pointeurs vers fonctions??
    Oui, �a marchera tout aussi bien. Par exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    bool Compare(int i1, int i2)
    {
        ...
    }
     
    std::sort(v.begin(), v.end(), &Compare);
    Mais l� encore, ce sera moins flexible et moins optimis�.

  6. #6
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut
    comment appelle t on l adresse de la fonction??

    comment ecrire une fonction qui recoit une adresse de fonction??

    sort(int,int, ???? );

  7. #7
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut
    Citation Envoy� par Loulou24
    Ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::sort(v.begin(), v.end(), SortByNumber());
    Est �quivalent � :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    SortByNumber Fonc;
    std::sort(v.begin(), v.end(), Fonc);
    .
    je ne comprends pas pkoi c la meme chose!!

    en fait, c est la meme chose qui me derange depuis le debut, ques qui se passe dans cette fonction sort()??

    si je lui envoi un objet du struct elle devra appeler
    Foct.la_fonction_bool();

    alors que si j envois directement l adresse de la fonction ca l appelle directement!!

    jme suis fais comprendre ou tu ne vois pas mon probleme??

  8. #8
    Membre confirm�
    Inscrit en
    D�cembre 2005
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2005
    Messages : 180
    Par d�faut
    desole, j avais pas saisi que la fonction c etait un operator()!!

    mais peux tu stp quand meme m expliquer comment


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::sort(v.begin(), v.end(), SortByNumber());
    est equivalent a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    SortByNumber Fonc; 
    std::sort(v.begin(), v.end(), Fonc);

  9. #9
    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
    SortByNumber() d�clare un objet temporaire non nomm� de type SortByNumber. Donc c'est comme si tu le d�clarais avant l'appel, sauf que l� il est cr�� et d�truit sur la m�me ligne de code.

    A part �a, tu ne peux vraiment pas faire d'effort pour �crire correctement ?

  10. #10
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Une pr�cision qui me semble utile :
    Dans
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::sort(v.begin(), v.end(), SortByNumber());
    Les parenth�ses de SortByNumber() font appel au constructeur et non � la m�thode operator().

  11. #11
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Voila,

    Le fait d'avoir () apr�s SortByNumber est l� ou se produit l'instanciation. Les parenth�ses font appel au constructeur et cela instancie ton objet. � noter qu'il se d�truit automatiquement apr�s son utilisation. Donc, comme l'a dit Loulou24, il s'agit d'un objet temporaire.

    Parcontre avec:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    SortByNumber Fonc;
    std::sort(v.begin(), v.end(), Fonc);
    Ton objet n'est pas d�truit apr�s l'utilisation.

Discussions similaires

  1. [HTTP] Comment utiliser les POST par programation
    Par Popof dans le forum G�n�ral Conception Web
    R�ponses: 9
    Dernier message: 31/01/2005, 09h14
  2. R�ponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les �v�nements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    R�ponses: 7
    Dernier message: 30/05/2004, 12h38
  4. R�ponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    R�ponses: 3
    Dernier message: 05/10/2003, 19h47

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