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

  FORUM HardWare.fr
  Programmation
  C++

  pointeur de fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pointeur de fonction

n°1281117
xilebo
noone
Posté le 11-01-2006 à 09:45:26  profilanswer
 

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 :)
 
 
 
 

mood
Publicité
Posté le 11-01-2006 à 09:45:26  profilanswer
 

n°1281403
Taz
bisounours-codeur
Posté le 11-01-2006 à 15:25:57  profilanswer
 

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

n°1281443
bugmenot
Posté le 11-01-2006 à 16:02:09  profilanswer
 

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 ...

n°1281523
fat
Posté le 11-01-2006 à 17:05:05  profilanswer
 

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.
 
 

n°1281568
Taz
bisounours-codeur
Posté le 11-01-2006 à 17:46:07  profilanswer
 

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

n°1281610
fat
Posté le 11-01-2006 à 18:46:57  profilanswer
 

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

n°1281669
Taz
bisounours-codeur
Posté le 11-01-2006 à 20:02:51  profilanswer
 

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

n°1281692
fat
Posté le 11-01-2006 à 20:58:06  profilanswer
 

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
n°1284909
xilebo
noone
Posté le 16-01-2006 à 19:43:30  profilanswer
 

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:


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

  pointeur de fonction

 

Sujets relatifs
Comment reprogrammer la fonction strfry a partir dfe pointeur?[C] -pedantic et affectation entre pointeur de fonction et "void *"
Fonction prenant un buffer en param et retournant un pointeurPointeur de fonction membre sur fonction membre de meme classe
[C] Warning sur pointeur de fonction avec scandir (résolu)Pointeur de fonction en paramètre
pointeur de fonction membre d'une classeComment appeler une fonction à l'aide d'un pointeur sur cette fonction
problème de pointeur sur fonctionPeux-ton faire des pointeur de fonction en java ?
Plus de sujets relatifs à : pointeur de fonction


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