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 CallBack membre d'une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 258
    Par défaut Fonction CallBack membre d'une classe
    Bonjour,

    D'après moi, il n'est pas possible, sous Windows, d'avoir une fonction CallBack qui soit membre d'un classe (Je suppose ne effet que les prologues et épilogues de telles fonctions sont conformes à celles d'un programme en C, et non en C++).

    Néanmoins (comme disait Cléopatre), je serais très heureux de me tromper sur ce sujet. Alors si quelqu'un d'entre vous pouvait me prouver que j'ai tort, qu'il ne se gêne pas. Je graverais à jamais son nom dans le marbre des octets.

    Kim

  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
    Le système d'exploitation n'a rien à voir avec ça, ce n'est qu'une histoire de langage.

    Tu peux très bien construire des callbacks avec n'importe quel type de foncteur, via par exemple boost.function.

    Après tout dépend de ce que tu appelles callback : tu en parles de manière générique ou dans un contexte particulier ?

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    S'il s'agit bien de stocker une fonction dans une classe, tu peux utiliser boost.function en effet...

    Si c'est toujours le même type, tu peux simplement utiliser un typedef pour simplifier le nom du type de ta fonction, afin d'utiliser un pointeur sur la fonction à appeler plus tard.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 258
    Par défaut Fonctions CAllback en c++
    Merci à Laurent et Alp pour leurs réponses.

    En fait, pour moi, une fonction CallBack est une fonction spécifique Windows qui a comme type de retour LPRESULT CALLBACK (en BCB 6.0, mais je suppose que c'est pareil ailleurs).
    C'est cette fonction qui répond à un message envoyé par Windows sur un évènement particulier (en l'occurence l'arrivée d'une frame à partir d'une source vidéo).

    Est-ce que cela change les réponses ?

    Kim

  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, ça change les réponses, là on se trouve dans un cas très particulier de callback.

    Dans ce cas effectivement tu ne pourras pas passer une fonction membre, mais c'est contournable facilement. Il suffit de passer une fonction membre statique, et dans celle-ci, de rediriger vers une fonction membre non-statique d'un objet particulier (qui doit donc être connu par la fonction statique).

  6. #6
    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
    Citation Envoyé par Laurent Gomila
    Il suffit de passer une fonction membre statique,
    Formellement, je crois que ce n'est pas permis, car une fonction membre statique n'a pas de linkage C, ou un truc du genre. Il faut une vraie fonction libre, qui plus est déclarée en extern "C". En pratique, ça marche bien.
    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.

  7. #7
    Membre confirmé
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Salut,

    Bon je suis loin d'être expert mais si tu la déclare en fonction amie cela te permet bien de la déclarer dans ta classe ?

    a+

  8. #8
    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
    Citation Envoyé par Bundy*Al
    Bon je suis loin d'être expert mais si tu la déclare en fonction amie cela te permet bien de la déclarer dans ta classe ?
    Ca n'a rien à voir, déclarer une fonction amie permet juste d'accéder aux données privées de la classe. Vu que la callback est généralement interne à la classe, on préférera plutôt la déclarer en tant que fonction membre statique.

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 258
    Par défaut [Résolu] Fonction callbak membre d'une classe
    Merci à tous.

    Ca comfirme ce que je pensais, mais j'ai moyen de contourner le problème à peu de frais

    Kim

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/11/2013, 13h22
  2. fonction membre d'une classe amie d'une autre classe
    Par olive_le_malin dans le forum C++
    Réponses: 3
    Dernier message: 16/11/2006, 09h39
  3. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  4. Pointeur sur des fonctions membres d'une classe
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 15/02/2006, 11h35
  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