pointeur de fonction

pointeur de fonction - C++ - Programmation

Marsh Posté le 11-01-2006 à 09:45:26    

bonjour,
 
j'ai un petit souci de pointeur de fonction, et je ne vois pas comment le résoudre.
 
Voici ce que j'aimerai faire :
 

Code :
  1. class un {
  2.    public :
  3.    un();
  4.    ~un();
  5.    void  (*PtrWorkingFunc)(unsigned char* buf,int len);
  6. };
  7. class deux {
  8.     public :
  9.     deux();
  10.     ~deux();
  11.     void Func(unsigned char * buf, int len);
  12.     void Init();
  13. };


 
dans la fonction init je voudrai faire quelque chose du genre :
 

Code :
  1. void
  2. deux::Init() {
  3.    Un un;
  4.    un.PtrWorkingFunc = Func;
  5. }


 
C'est surement un problème de déclaration de PtrWorkingFunc, mais je ne vois pas comment le déclarer. Comment puis-je déclarer PtrWorkingFunc pour que cela fonctionne ?
 
 
merci :)
 
 
 
 

Reply

Marsh Posté le 11-01-2006 à 09:45:26   

Reply

Marsh Posté le 11-01-2006 à 15:25:57    

attend ... c'est quoi ces trucs Init() déjà ?

Reply

Marsh Posté le 11-01-2006 à 16:02:09    

Je vois pas trop à quoi sert Init(), mais c'est pas de là que vient le problème je pense
 
un.PtrWorkingFunc = &Func; // on donne la référence sur la fonction
// puis pour un appel
un.(*PtrWorkingFunc)(sbuffer, ilen)
 
enfin, je pense, le C ça a jamais été mon fort
 
@xilebo : si tu reçois une demande sur ICQ, c'est moi, j'avais pas envie de m'inscrire sur HFr ...

Reply

Marsh Posté le 11-01-2006 à 17:05:05    

Salut,
 
en effet ca ne peux pas marcher comme ca, car ta déclaration de PtrWorkingFunc est un pointeur vers une fonction simple, pas une fonction de classe.
or une fonction de classe est rattachée à une instance.
il faut la déclarer comme ca :
void  (__closure *PtrWorkingFunc)(unsigned char* buf,int len);
 
ou alors tu peux déclarer la fonction Func dans la classe deux comme une fonction statique, mais alors tu ne pourras pas acceder à des membres non statiques de la classe dans cette fonction Func.
 
Une autre manière plus simple et plus OO est de déclarer Func comme une fonction virtuelle et de la surcharger dans la classe deux.
 
 

Reply

Marsh Posté le 11-01-2006 à 17:46:07    

n'importe quoi ... mais alors n'importe quoi, j'en reviens pas ...

Reply

Marsh Posté le 11-01-2006 à 18:46:57    

qu'est-ce qui est n'importe quoi ?

Reply

Marsh Posté le 11-01-2006 à 20:02:51    

tu ferais mieux de faire une recherche : j'ai fait un topic là dessus justement. T'es vraiment un marrant toi

Reply

Marsh Posté le 11-01-2006 à 20:58:06    

C'est plutot toi qui devrais te remettre en cause un peu, car c'est un peu facile de dire c'est nul sans explication. même là tu te contente de dire "tu n'a qu'à chercher pour savoir pourquoi".
tu as fait un topic là dessus, ce sera bien de mettre le lien, non ?
 
Concernant ce que j'ai dis :
le __closure n'est pas standard, je l'admets, je ne sais pas si c'est utilisable sur un autre compilateur que celui de borland.
 
ensuite concernant la fonction statique, je ne vois pas ce qui cloche, une fonction statique étant pareil qu'une fonction tout court.
 
et troisièment, vu ce qu'il veut faire: déclarer un membre qui contient un pointeur sur une fonction dans la classe parent, c'est peut-etre parce qu'il vaut faire des traitement dans la classe parent qui font appel à cette fonction qui n'est pas définie dans la classe parent.
comme ensuite il déclare une fonction dans la classe dérivée qu'il veut justement utiliser pour initialiser le pointeur de fonction dans la classe parent, c'est typiquement l'utilisation qu'on fait des fonctions virtuelles.
 
Tu vois je prends la peine d'argumenter, je ne me contente pas de dire : "c'est pas vrai, c'est moi qui aie raison"
 
Bon je ne t'en veux pas, tu changera peut-etre d'attitude avec l'âge.


Message édité par fat le 11-01-2006 à 20:58:37
Reply

Marsh Posté le 16-01-2006 à 19:43:30    

fat a écrit :

Salut,
 
en effet ca ne peux pas marcher comme ca, car ta déclaration de PtrWorkingFunc est un pointeur vers une fonction simple, pas une fonction de classe.
or une fonction de classe est rattachée à une instance.
il faut la déclarer comme ca :
void  (__closure *PtrWorkingFunc)(unsigned char* buf,int len);
 
ou alors tu peux déclarer la fonction Func dans la classe deux comme une fonction statique, mais alors tu ne pourras pas acceder à des membres non statiques de la classe dans cette fonction Func.
 
Une autre manière plus simple et plus OO est de déclarer Func comme une fonction virtuelle et de la surcharger dans la classe deux.


 
J'ai finalement fait ca. C'était la meilleure solution. Mon problème est que j'ai une vision trop C de mes programmes, et j'ai tendance a tout réécrire alors que ca existe déjà. Merci d'avoir pris le temps de répondre cela dit.
 
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed