Passage de pointeur de fonction membre à une fonction - C++ - Programmation
Marsh Posté le 19-11-2003 à 12:00:11
(: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)
Marsh Posté le 19-11-2003 à 14:01:31
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
Marsh Posté le 17-02-2004 à 15:18:43
chrisbk a écrit : (:cry |
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 :
|
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
Marsh Posté le 17-02-2004 à 16:25:34
en supposant (espérant?) que ta méthode Test est bien une méthode statique de classe maClasse, alors:
Code :
|
Marsh Posté le 17-02-2004 à 16:34:37
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 )
Marsh Posté le 17-02-2004 à 16:36:01
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 |
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
Marsh Posté le 17-02-2004 à 16:40:14
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" ?
Marsh Posté le 17-02-2004 à 16:43:42
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 :
|
apres
Code :
|
Marsh Posté le 17-02-2004 à 16:47:59
1/ que ce soit prévu à la base?
2/ okkkk, tu la sors mais tu la met pas dans une autre classe
merci j'ai enfin compris ce que tu voulais dire et que fonction membre != fonction membre de cette classe-ci
Marsh Posté le 17-02-2004 à 17:41:49
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++
Marsh Posté le 17-02-2004 à 18:06:06
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
Marsh Posté le 17-02-2004 à 18:14:17
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)
Marsh Posté le 17-02-2004 à 18:27:19
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++ ?
Marsh Posté le 18-02-2004 à 09:45:31
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 )
Marsh Posté le 18-02-2004 à 10:23:13
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
Marsh Posté le 19-11-2003 à 11:57:15
Bonjours ,
Voilà mon problème:
J'ai une fonction qui reçoit en paramètre un pointeur de fonction (en l'occurrence
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)
mais ça change rien
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.