Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1423 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Passage de pointeur de fonction membre à une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage de pointeur de fonction membre à une fonction

n°570588
peak
Posté le 19-11-2003 à 11:57:15  profilanswer
 

Bonjours  :hello: ,
Voilà mon problème:
J'ai une fonction qui reçoit en paramètre un pointeur de fonction (en l'occurrence

Code :
  1. GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));

de glut.h) en générale cette fonction s'appel simplement comme ça : glutDisplayFunc(display);
Le problème est que j'ai voulu mettre le tout dans une class (la fonction display ainsi que l'appel à glutDisplayFunc()) mais le compilo n'a pas l'air d'apprécier:
glutDisplayFunc' : cannot convert parameter 1 from 'void (__thiscall Window<float,float,float>::*)(void)' to 'void (__cdecl *)(void)'
 
J'ai pensé à faire ceci : (on sais jamais)

Code :
  1. //declarer un nouveau pointeur de fonction membre:
  2. void  (Window<PosType, ColType, GlobalType>::*pfuncDisplay) (void);
  3. //l'initialiser dans le constructeur comme ceci:
  4. Window<PosType, ColType, GlobalType>::pfuncDisplay=(Window<PosType, ColType, GlobalType>::display);
  5. //et enfin appeler glutDisplayFunc() comme ça :
  6. glutDisplayFunc(Window<PosType, ColType, GlobalType>::pfuncDisplay);


mais ça change rien  :sweat:  
 
En fait avant d'être confronter à ce problème je ne savais même pas qu'il existait des pointeurs de fonction donc tout les conseils par rapport à leur manipulation sont les bienvenus.
Merci d'avance.
 :bounce:  

mood
Publicité
Posté le 19-11-2003 à 11:57:15  profilanswer
 

n°570593
chrisbk
-
Posté le 19-11-2003 à 12:00:11  profilanswer
 

(:cry:)
 
Probleme archi classique a tendance bateau. Un pointeur de fonction (ce que veux GLUT) est different d'un pointeur de fnction membre (ce que tu lui refile)
 
Donc soit tu sors ta fonction de ta classe, soit tu la fous static (avec les a-coté que ce genre de manip amene)
 
 

n°570698
hellbilly
free smile
Posté le 19-11-2003 à 14:01:31  profilanswer
 

Utilise un wrapper c++ pour glut sinon ca va etre vite galere
 
http://www.stetten.com/george/glut [...] aster.html
http://www.mediaforge.net/~kgirard [...] apper.html
 

n°570802
peak
Posté le 19-11-2003 à 15:35:12  profilanswer
 

ok,  
désolé pour la banalité mais merci beaucoup

n°645504
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 15:18:43  profilanswer
 

chrisbk a écrit :

(:cry:)
 
Probleme archi classique a tendance bateau. Un pointeur de fonction (ce que veux GLUT) est different d'un pointeur de fnction membre (ce que tu lui refile)
 
Donc soit tu sors ta fonction de ta classe, soit tu la fous static (avec les a-coté que ce genre de manip amene)
 


j'ai le même genre de problème (le classique pointeur de fonction membre != pointeur de fonction), et j'ai donc fait ce que tu as dit,  sorti la fonction, mais je dois pas faire ce qu'il faut apparemment (pas taper) :  

Code :
  1. dans le .h :
  2. void (*pF)(void);
  3. dans le .cpp :
  4. ...
  5. pF = &monObjet->Test; // j'ai deja une erreur C2276, ou C2440 sans le & ici, mais je vois pas cmt faire d'autre pour une fct non statique
  6. ...
  7. appel(pF);


ou test est une fonction non statique ne prenant rien en paramètre et ne retournant rien, d'une classe dont monObjet est une instance.
 
Je fais sûrement un truc de travers, si qqn pouvait me dire gentillement quoi...
 
merci


Message édité par sisicaivrai le 17-02-2004 à 15:21:17
n°645663
SoWhatIn22
Posté le 17-02-2004 à 16:25:34  profilanswer
 

en supposant (espérant?) que ta méthode Test est bien une méthode statique de classe maClasse, alors:

Code :
  1. appel( maClasse::Test );

n°645683
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 16:34:37  profilanswer
 

ben non, elle n'est pas statique (j'aurais fait maClasse::Test) sinon je ne comprend pas l'explication de chrisbk disant : soit tu rends ta méthode statique, soit tu la sort de ta classe
 
On ne sait donc pas faire pointer vers une méthode non statique?
 
(edit : en essaytn ce que tu me dis, en mettant Test en statique, j'ai une error c2659 :sweat: )


Message édité par sisicaivrai le 17-02-2004 à 16:35:39
n°645690
chrisbk
-
Posté le 17-02-2004 à 16:36:01  profilanswer
 

sisicaivrai a écrit :

ben non, elle n'est pas statique (j'aurais fait maClasse::Test) sinon je ne comprend pas l'explication de chrisbk disant : soit tu rends ta méthode statique, soit tu la sort de ta classe
 
On ne sait donc pas faire pointer vers une méthode non statique?


 
un pointeur de fonction statique / non membre = 4 octets
ptr de fonction membre = 8 octets
 
y'a tout un pb de compatibilité de type la

n°645700
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 16:40:14  profilanswer
 

donc, on ne sait pas faire pointer vers une fonction non membre, non statique?
que veux-tu dire par "soit tu la sors de ta classe" ?


Message édité par sisicaivrai le 17-02-2004 à 16:40:24
n°645711
chrisbk
-
Posté le 17-02-2004 à 16:43:42  profilanswer
 

sisicaivrai a écrit :

donc, on ne sait pas faire pointer vers une fonction non membre, non statique?


 
si, on *peut* mais faut que ca soit prevu a la base, ce qui n'est pas le cas ici
 
 

Citation :

que veux-tu dire par "soit tu la sors de ta classe" ?


 
avant :

Code :
  1. class prout
  2. {
  3. void machin()
  4. }


 
apres

Code :
  1. void machin()
  2. class prout
  3. {
  4. }

mood
Publicité
Posté le 17-02-2004 à 16:43:42  profilanswer
 

n°645719
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 16:47:59  profilanswer
 

1/ que ce soit prévu à la base?
 
2/ okkkk, tu la sors mais tu la met pas dans une autre classe :sol:
merci j'ai enfin compris ce que tu voulais dire et que fonction membre != fonction membre de cette classe-ci
 

n°645808
Taz
bisounours-codeur
Posté le 17-02-2004 à 17:41:49  profilanswer
 

1) si mais quand tu utilises un truc C, faut pas trop en demander
2) avec des jolis objets fonctions template, ce problème n'existe pas en C++

n°645838
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 18:06:06  profilanswer
 

2/ je sais bien, mais quand tu veux utiliser des bibliothèques existantes, et qu'on te demande un pteur de fct, tu trouves un pteur de fct :/

n°645850
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:14:17  profilanswer
 

ben tu fais du C dans ce cas là, c'est tout. impossible d'exploiter les fonctionnalités du C++. d'ailleurs garde toi bien d'utiliser les exceptions, quand on mixe avec du C, ça fait très souvent des massacres (genre si ta fonction callback jète un truc, c'est la mort assurée)

n°645855
sisicaivra​i
Life is Beautifullll
Posté le 17-02-2004 à 18:17:43  profilanswer
 

pourtant ils se revendiquent c++ :  
http://www.vtk.org/

n°645862
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:27:19  profilanswer
 

VTK ça l'ait un peu plus, mais ils sont rien capté avec leur ::New et ::Delete c'est abruti ... mais là on parle de GLUT APIENTRY et autres bordels purement en VC++ ?

n°646495
sisicaivra​i
Life is Beautifullll
Posté le 18-02-2004 à 09:45:31  profilanswer
 

j'ai repris le post pour poser ma question sur vtk :)
pq c'est pas bien leurs New et Delete? (en fait je vois pas l'intérêt du truc :D )


Message édité par sisicaivrai le 18-02-2004 à 09:47:25
n°646541
Taz
bisounours-codeur
Posté le 18-02-2004 à 10:23:13  profilanswer
 

parce que ça n'a pas d'intérêt, et qu'il y a des mécanismes beaucoup plus léger syntaxiquement pour empêcher la création d'objet sur la pile


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Passage de pointeur de fonction membre à une fonction

 

Sujets relatifs
[resolu] Login et espace membre avec un cookie ?fonction seekg()
Comment se servir dans une classe d'une fonction menbre d'une autre?une fonction pour savoir si un objet existe?
surcharge de fonction en dehors de class ?Fonction MD5 à l'envers
[PHP] Probleme sur la fonction header()Passage Microsoft Jet -> ODBC
declaration de fonction, C++ vers delphimatrice, fonction
Plus de sujets relatifs à : Passage de pointeur de fonction membre à une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR