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

Langage C++ Discussion :

[HowTo : surcharge] Préciser une fonction membre


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Par défaut [HowTo : surcharge] Préciser une fonction membre
    Bonjour,

    Voilà, dans le cadre d'un projet, j'ai un pointeur sur fonction membre que je dois utiliser comme paramètre d'une méthode. Je veux que ce pointeur pointe sur une méthode qui bénéficie de nombreuses surcharges, mais j'en veux une en particulier.
    Je cherche à savoir si c'est possible, est-ce que ça l'est ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Oui, c'est possible. Il va utiliser le type de ton pointeur pour déterminer quelle version de la surcharge prendre.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Par défaut
    Oui, en fait, il faut que je l'assigne avant à mon pointeur de fonction au lieu de le faire à la volée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    forAllVertex(&Vertex::setColor, r, g, b, a);
    Je dois plutôt faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef void (Vertex::* pf4)(float, float, float, float);
    pf4 pf = &Vertex::setColor
    forAllVertex(pf, r, g, b, a);
    Mais je voulais savoir si il était possible de le spécifier à la volée... Je pense pas.
    Parce que je dispose d'une surcharge pour forAllVertex dans son nombre d'arguments. Et j'ai défini des types pf1, pf2, pf3, etc.
    Et je n'ai malheureusement pas le droit d'utiliser les templates variadiques (si quelqu'un sait quand ce sera adopté la nouvelle norme 0x je suis preneur).

    Sachant que setColor est lui-même surchargé...

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Ylvin Voir le message
    )(si quelqu'un sait quand ce sera adopté la nouvelle norme 0x je suis preneur).
    c'est fait depuis un petit moment

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Par défaut
    Merde, c'est que c'est vrai en plus...

    Il y a des baffes qui se perdent. -_-
    Mais j'ai l'impression que Visual C++ ne le supporte toujours pas entièrement. C'est sans doute pour cette raison qu'ils continuent à me prendre la tête avec l'ancienne norme.
    CF : http://wiki.apache.org/stdcxx/C++0xCompilerSupport

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Ylvin Voir le message
    Merde, c'est que c'est vrai en plus...

    Il y a des baffes qui se perdent. -_-
    Mais j'ai l'impression que Visual C++ ne le supporte toujours pas entièrement. C'est sans doute pour cette raison qu'ils continuent à me prendre la tête avec l'ancienne norme.
    CF : http://wiki.apache.org/stdcxx/C++0xCompilerSupport
    oui, malheureusement VS (2010) ne gère pas les variadic templates
    et ça ne semble pas prévu pour VS 2011 non plus :/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef void (Vertex::* pf4)(float, float, float, float);
    forAllVertex(pf4(&Vertex::setColor), r, g, b, a);

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il faudrait que je me plonge dans la norme pour donner une réponse, car là ta situation n'est pas triviale.

    Mais pourquoi faire autant de surcharges de forAllVertex ? Une seule version templatisée à un seule argument que tu utilises éventuellement en utilisant [boost/std]::bind ou un lambda devrait aboutir au même, non ?

    Ce qui m'a fait penser que bind a probablement le même problème que toi... Et en regardant, je suis tombé sur http://www.boost.org/doc/libs/1_48_0...err_overloaded mais l'exemple qu'ils donnent est avec le même nombre d'arguments dans les deux overloads.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 34
    Par défaut
    Merci Ekleog. J'ignorai (ou bien j'avais oublié) qu'on pouvait faire ce genre de chose. C'est précisément ce genre de truc que j'avais en tête.

    @ JolyLoic : Je suis pas super au point avec Boost, bind, etc. Ce sont des lacunes dont j'ai conscience, mais je suis un peu débordé. Pour le coup, je suis pas certain de comprendre tout ce que tu indiques, et je vois pas trop comment bind pourrait remplacer le bidule ?
    Après, boost, c'est quelque chose d'assez mystérieux dans son fonctionnement pour moi et j'ai peur que l'utilisation de bind à ce niveau là (centaine d'appels à la seconde possiblement) me coûte très cher en terme de performance...
    Si tu pouvais m'expliquer, je pourrai peut-être mieux te répondre, et accessoirement revoir mes méthodes d'implémentation.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 16/05/2006, 11h26
  2. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  3. Réponses: 4
    Dernier message: 01/12/2005, 12h33
  4. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  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