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

MFC Discussion :

[MFC] Pointeur this et fonctions statiques


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut [MFC] Pointeur this et fonctions statiques
    Salut !

    Je voudrais savoir si il est possible d'accéder aux membres non statiques depuis une fonction statique, sans que cette dernière dispose du moindre paramètre.

    Ma fonction statique est défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static void MaFonction()
    et depuis cette fonction je dois accéder à des membres non statiques.

    MaFonction est statique parce qu'il s'agit d'une callback que je passe à un objet d'une autre classe.

    voila pour les informations, j'espère qu'il existe une solution pour résoudre ce problème

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    Et bien si tu ne peux pas passer le pointeur sur l’instance dans la fonction statique.
    Eventuellement stocker dans un pointeur statique de la classe le pointeur sur l’objet en cours.
    Et le récupérer dans ta fonction statique.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Bon, je viens de poster deux messages consécutifs autour de la problématique de l'utilisation des fonctions de callback et l'accès aux fonctions non statiques depuis une méthodes statique.

    Mon problème était le suivant :
    Je disposais de deux classes, une graphique (dérivée de la classe CDialog) et l'autre générique non graphique (une classe effectuant un calcul spécifique).

    Mon objectif était de conserver l'aspect générique de ma classe de calcul et pour cette raison je voulais que cette dernière retourne les résultats à une classe utilisatrice (ma classe CDialog) sans avoir de lien, référence à un object utilisateur spécifique, mais simplement par le biais d'une fonction de callback ... voila pour le problème.

    L'implémentation de la fonction de callback n'a pas posé de problème, je récupérais bien les résultats dans la classe CDialog mais la callback étant statique je me trouvais dans l'incapacité de réaliser l'affichage en utilisant les contrôles membre (non statique) de cette dernière ! Ce que j'ai fait pour résoudre ce petit problème c'est que j'ai déclaré dans mon application l'instance de ma classe Cdialog comme globale ! Ca m'ennuyait un peu car l'architecture était changé et je ne voyais pas d'intérêt à étendre la porté de cette classe. tant pis puisque l'objectif est atteint, ma classe de calcul est générique et peut transmettre ses résultats à n'importe quelle classe utilisatrice, pour peu qu'elle respecte l'interface de la callback.

    Désolé d'avoir été si long, mais peut être que cette prose servira à d'autres ... bien que je n'ai pas vu beaucoup de message concernant les callback dans le forum

    ++

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    pour répondre à ta réponse ... je sais c'est un peu "capilotracté" comme tournure j'ai essayé de stocker le contenu du pointeur this dans un pointeur statique, mais dans ce cas de figure j'obtenais une erreur à l'édition des liens.

    Je ne pourrais pas te donner le message exacte malheureusement, histoire de comprendre l'occurence de l'erreur ... mais je réessayerais la prochaine fois car si tu me donnes ce conseil c'est que c'est possible

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ce que je proposais dans un contexte trés simplifié c'est :
    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
     
    class MyClass 
    {
    public:
    ..........
    static void SetTheOne(MyClass *p){m_pLastInstance=p;}
     
    void static Fonc()
    {
      if(m_pLastInstance!=NULL)
     {
    // traitement
     }
    }
    public:
    static MyClass *m_pLastInstance;
    };
    // .cpp
    MyClass *MyClass ::m_pLastInstance=NULL;
     
    //quelque part
    MyClass class;
    MyClass::SetTheOne(&class);
    MyClass::Fonc();
    la seule condition (si c'est possible) c'est de pouvoir fixer la derniere instance de l'objet avec l'appel de la fonction statique.
    je ne sais pas si ça repond a ta question.


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut
    Ok, j'ai testé cette façon de faire et ça tourne bien.

    Je pense que je vais conserver cette façon de faire car ça respecte l'architecture (pas de variable globale sur ma classe CDialog).

    Merci

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

Discussions similaires

  1. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  2. Réponses: 6
    Dernier message: 07/10/2009, 18h16
  3. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  4. Réponses: 4
    Dernier message: 16/03/2004, 18h03
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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