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

  FORUM HardWare.fr
  Programmation
  C

  Comment appeler une fonction à l'aide d'un pointeur sur cette fonction

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment appeler une fonction à l'aide d'un pointeur sur cette fonction

n°756999
Carol Poul​in
Posté le 08-06-2004 à 19:18:33  profilanswer
 

Je dois écrire une fonction qui prend en argument une liste de type générique. De ce fait lorsque j'écris ma fonction, je ne sait pas quel  type (de struct) sera passer en argument. Je veut donc faire appelle à un pointeur générique (void * compare;) qui pointera sur une autre fonction, mais qui peut changer. Comment coder l'appel cette autre fonction à l'aide d'un pointeu.

mood
Publicité
Posté le 08-06-2004 à 19:18:33  profilanswer
 

n°757003
docmaboul
Posté le 08-06-2004 à 19:28:10  profilanswer
 

Carol Poulin a écrit :

Je dois écrire une fonction qui prend en argument une liste de type générique. De ce fait lorsque j'écris ma fonction, je ne sait pas quel  type (de struct) sera passer en argument. Je veut donc faire appelle à un pointeur générique (void * compare;) qui pointera sur une autre fonction, mais qui peut changer. Comment coder l'appel cette autre fonction à l'aide d'un pointeu.


 
je ne comprends pas ce que vous voulez faire mais pour déclarer un pointeur sur fonction et l'utiliser ensuite il faut faire comme suit:
 

Code :
  1. /* pour l'exemple */
  2. int ma_fonction_pointee(int param_a_la_con)
  3. {
  4.   return param_a_la_con;
  5. }
  6. void taratata()
  7. {
  8.   int (*ptr_func)(int)=ma_fonction_pointee; /* déclaration & affectation du pointeur */
  9.  
  10.   (*ptr_func)(3); /* appel */
  11. }


 

n°757006
cricri_
Posté le 08-06-2004 à 19:39:52  profilanswer
 

moi en param_a_la_con je passe un pointeur sur une structure genre ctx (contexte), afin d'être générique, mais bon, ce n'est pas forcémment la panacée ...

n°757074
Carol Poul​in
Posté le 08-06-2004 à 20:26:37  profilanswer
 

Comment je fait pour initialiser le pointeur de fonction déclaré à une adresse de fonction si la fonction dépend du type de struct passer en paramètre?
 

Code :
  1. /* pour l'exemple */
  2.   int ma_fonction_pointee1(TypeStruc1 param_a_la_con)
  3.   {
  4.       return 1;
  5.   }
  6.  
  7.   int ma_fonction_pointee2(TypeStruc2 param_a_la_con)
  8.   {
  9.       return 2;
  10.   }
  11.  
  12.   void taratata(void * param_a_la_con)
  13.   {
  14.       int (*ptr_func)(????)= ???? // =ma_fonction_pointee1 si param_a_la_con  
  15.    //est de type TypeStruc1 et ma_fonction_pointee2 si param_a_la_con  
  16.    //est de type TypeStruc2  
  17.      
  18.       (*ptr_func)(param_a_la_con); /* appel */
  19.   }

n°757141
kfman
Credo quia absurdum
Posté le 08-06-2004 à 21:18:47  profilanswer
 

Il sert à quoi le (int) entre parenthèse avant l'affectation Doc ?


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
n°757142
Taz
bisounours-codeur
Posté le 08-06-2004 à 21:19:36  profilanswer
 

à l'exemple

n°757144
kfman
Credo quia absurdum
Posté le 08-06-2004 à 21:20:18  profilanswer
 

Taz a écrit :

à l'exemple


 
EDIT: cai bon...


Message édité par kfman le 08-06-2004 à 21:21:00

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
n°757156
Taz
bisounours-codeur
Posté le 08-06-2004 à 21:31:31  profilanswer
 

regarde comment fonctione qsort par exemple

n°758684
matafan
Posté le 10-06-2004 à 02:21:47  profilanswer
 

Pas besoin de deréférencer pour appeler la fonction : ptr_func(param_a_la_con) marche aussi bien.
 

n°758702
Taz
bisounours-codeur
Posté le 10-06-2004 à 07:11:42  profilanswer
 

tout simplement parce qu'un jour, il a été décidé que ce n'était pas nécessaire. d'ou la validité de (*********************************************f)()

mood
Publicité
Posté le 10-06-2004 à 07:11:42  profilanswer
 

n°758723
cricri_
Posté le 10-06-2004 à 08:35:19  profilanswer
 

Carol Poulin a écrit :

Comment je fait pour initialiser le pointeur de fonction déclaré à une adresse de fonction si la fonction dépend du type de struct passer en paramètre?
 
Essaye de déclarer une union de tous les pointeurs de structure que tu utilises, et mets la en paramètre de tes fonctions.

n°758727
Taz
bisounours-codeur
Posté le 10-06-2004 à 08:45:31  profilanswer
 

moi je dirais plutot fait de la généricité
 
// une fonction générique
int f(void* args);
 
struct FooArgs;
int Foo(void* args)
{
  struct FooArgs *fargs = args;
  // traitement
}
 
 
etc
 
 
encore une fois, j'ai donné plusieurs fois le même exemple sur comment faire
 


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

  Comment appeler une fonction à l'aide d'un pointeur sur cette fonction

 

Sujets relatifs
fonction pour connexion serveur + regex[Java-SQLServer] Appeler une procédure stockée contenant des espaces
Aide avec client FTPaide en pascal
Java-Oracle et JSp besoin d'aide [RESOLU]aide ASP pour un débutant. [Résolu]
[Websphere] fonction split() de la classe String non implémenté ?[PHP] Problème sur une fonction, hébergé sur un serveur UNIX
a l'aide pour script mot de passe[C++] : Drag&Drop : Demande d'aide
Plus de sujets relatifs à : Comment appeler une fonction à l'aide d'un pointeur sur cette fonction


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