Salut a tous les afficionados de C et les maitres du preprocesseur!
Ok, donc j'ai un fichier qu'on va appeler timer.c qui contient un main et qui, caricaturalement, alloue de la memoire, lance un timer, lance une fonction avec pour argument des pointeurs venant du malloc d'avant, stoppe et affiche le timer. La fonction en question est decrite dans un autre fichier, mettons fonction.c. Jusque la, rien de bien excitant.
Maintenant, le truc qui fait mal, c'est que j'ai pleins de fonction.c differents qui contienne des fonctions qui ont le meme nom mais pas la meme signature et je veux avoir un timer.c qui puisse les gerer tous.
Donc, pour resumer, je veux le meme code pour timer.c qui puisse linker avec fonction1.c et fonction2.c ci-dessous.
timer.c main{
a=malloc()
b=malloc()
...
start time
fonction(a,b,...)
stop time
}
fonction1.c {
void fonction(int[4],int[5])
}
fonction2.c {
void fonction(int[2],int[5],int[6])
}
En verite, les fonction.c sont autogeneres par un autre programme donc j'en ai une infinite de differents et ils ont vraiment tous des signatures differentes. Par contre, j'aimerais bien ecrire un unique timer qui les gere tous.
Bref, pour faire tout ca, il me faut definir quelques define dans les fonctions.c ce qui n'est pas un probleme, ca pourrait etre comme ca par exemple pour fonction2.c:
#define NUM_ARGS 3
#define TYPE_ARG_1 int
#define SIZE_ARG_1 2
#define TYPE_ARG_2 int
#define SIZE_ARG_2 5
#define TYPE_ARG_3 int
#define SIZE_ARG_3 6
bon, maintenant que j'ai ca, comment je fais pour l'appeler depuis timer.c??? En supposant que je puisse reconstruire la liste d'arguments (ce qui est deja pas gagne), il me faudrait faire un truc du genre
apply(fonction,[arg1,arg2,arg3]) qui appelle fonction avec arg1,arg2 et arg3 comme arguments
bref, c'est l'inverse d'une fonction variadique: "j'ai besoin d'appeler une fois une fonction qui peut etre definie de plusieurs maniere" alors qu'une fonction variadique a besoin de definir une fois une fonction qui peut etre appelee de plusieurs maniere.
Merci pour votre connaissance infinie
Fred
Message édité par Cytoplasm le 13-09-2007 à 04:34:20