|
Bas de page | |
---|---|
Auteur | Sujet : Pointeurs de fonctions avec "..." |
Publicité | Posté le 14-06-2007 à 16:22:18 |
Taz bisounours-codeur |
casimimir | c'est possible parceque je l'ai fais en son temps, mais ca fait un bail que je n'ai plus codé en c.
|
in_your_phion |
je cherche à faire ca. Un pointeur de fonction qui pointe vers n'importe quel type de fonction, ou plus précisemment des fonctions dont le nombres d'argument n'est pas le même et qui ont pour premier argument un int. Ca marche si je fais :
est-ce envisageable ? Message édité par in_your_phion le 14-06-2007 à 16:59:20 |
Taz bisounours-codeur |
in_your_phion |
par exemple (exemple bidon mais bon) :
Message édité par in_your_phion le 14-06-2007 à 17:07:32 |
Taz bisounours-codeur |
casimimir | pointer vers des fonctions dont le nombre des arguments n'est pas le même la je ne pense pas que ce soit possible, on peut s'inspirer de la programmation objet et surcharger une fonction, mais la définition de ta fonction doit être la même. donc tu devras avoir le même nombre d'arguments, ou alors tu fais passer tes arguments via un tableau de pointeur et tu ne passe que le tableau en paramètre. |
in_your_phion | ok ok ...Merci mais en théorie c'est possible ? je veux dire, mon truc marche non ? Imaginons que les fonctions sont déja la et que je peux pas y toucher, comment faire ?? Message édité par in_your_phion le 14-06-2007 à 17:29:55 |
casimimir | tel quel je ne pense pas, parceque si tu regardes la définition de f dans ta fonction bidon tu verras que tu as défini le nombre d'argument, donc déja la tu ne passeras pas la compilation je pense. |
Publicité | Posté le 14-06-2007 à 17:33:52 |
in_your_phion |
|
Sve@r |
--------------- Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. |
in_your_phion |
salut ps: comment fais-ton pour créer une fonction extern qui appelle la fonction main ? Message édité par in_your_phion le 14-06-2007 à 18:14:46 |
matafan | Oui tu peux le faire, et d'ailleurs tu n'es même pas obligé de mettre des "...". Le fait de mettre des "..." ne rend pas la chose plus propre. |
in_your_phion |
|
matafan |
in_your_phion |
c'est possible ça ?? Mais comment se fesse ?????? Comment se
oO, mais pourquoi donc comment qu'est-ce ainsi d'ou quoi ? Dans ce cas quel intéret de déclarer un void (*f) (void *a, void *b); dans certains cas, plutot qu'un void (*f)() ?? Message cité 1 fois Message édité par in_your_phion le 15-06-2007 à 11:19:33 |
matafan | (*f)() veut dire qu'on ne dit rien sur les arguments de f, pas que f ne prend pas d'arguments (qui s'écrirait (*f)(void)). |
in_your_phion |
|
Taz bisounours-codeur |
in_your_phion |
matafan | Non mais les "()" ça ne marche que pour les déclarations. Quand tu définies ta fonction il faut évidemment donner tous les arguments. D'où l'utilité des "..." par définir des fonctions à arguments variables. |
in_your_phion |
je ne suis pas sûr de comprendre ... mon exemple ci dessus marche mais je n'ai pas utilisé la notation ..., ou faudrais-je que je l'utilise ? comment faire pour passer la liste d'arguments ? Avec un void * ? Et si les arguements ne sont pas tous de meme type au fait merci pour votre aide Message édité par in_your_phion le 15-06-2007 à 12:39:59 |
matafan | Dans ce cas tu n'as pas à utiliser la notation "..." car tu n'as pas de fonction à arguments variable. Tu as juste une fonction normale (toto) et un pointeur de fonction (f), qui peut ponter vers des fonctions ayant un nombre quelconque d'arguments.
|
in_your_phion |
ok .... donc ca ne sert à rien alors "...", c'est juste un truc de notation ??
donc, je lui envoie un pointeur de fonction, et params, qui est un tableau qui regroupe la liste des paramètres. Par exemple, params[0] donne le nombre d'arguments et apres, la suite du tableau sont les arguments effectifs. Par exemple :
Message édité par in_your_phion le 15-06-2007 à 14:56:27 |
matafan | A part un gros switch bien dégueu sur le nombre de paramètres, je ne vois pas. Du coup ça limite vachement l'intérêt du callback. |
in_your_phion |
|
matafan | Non, la meilleurs solution c'est de faire ton truc différemment. Tes fonctions f devraient elles aussi prendre un tableau params en paramètre. Ou alors un va_list. |
Sve@r |
--------------- Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. |
tbp | Tant qu'à faire dans le brutal, http://gcc.gnu.org/onlinedocs/gcc/ [...] Calls.html |
Ace17 |
|
in_your_phion |
merci en fait c'est ca que je veux faire Je veux juste savoir comment on fait pour passer une fonction "générique". Dans cet exemple les arguments sont tous de même type. Comment pourais t-on faire s'il ne sont pas de même type ? merci Message édité par in_your_phion le 18-06-2007 à 00:29:02 |
tbp | __builtin_apply & consorts permet juste de trampoliner un peu plus proprement, le tripotage des arguments est dehors de sa juridiction. J'ai des doutes sur le bien fondé de votre choix de cette approche si vous ne saisissez pas le pourquoi. |
in_your_phion |
|
Publicité | Posté le |
Sujets relatifs | |
---|---|
question sur les pointeurs de fonctions | pointeurs de fonctions |
[Résolu] Pointeurs et fonctions | [C++] Problème avec les pointeurs de fonctions |
Templates et pointeurs de fonctions membres? | pb de pointeurs sur fonctions en c++ |
Pointeurs sur fonctions (question pointue !) | Pointeurs sur fonctions de classes distinctes |
[C] Fonctions et pointeurs... ? | [C++] fonctions void, pointeurs et creations de structurs (en m tps!!) |
Plus de sujets relatifs à : Pointeurs de fonctions avec "..." |