[C] Fonction générique, pointeur de fonction
Résolu
Sauvegarde2
Messages postés
205
Date d'inscription
Statut
Membre
Dernière intervention
-
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Est-il possible de créer une fonction en C qui fait ça (sans faire hurler le compilateur) :
void* fexec_3(void* arg[4])
{
return (*arg[0])(*arg[1], *arg[2], *arg[3]);
}
C'est à dire une fonction générique qui prend en argument un tableau constitué d'un pointeur de fonction à 3 arguments de type quelconque suivi des 3 arguments en question ; puis exécute la fonction et renvoi le résultat.
Le tout sans cast (généricité oblige) ; ou alors en faisant un cast générique de la fonction *arg[0].
Une telle fonction serait intéressante pour utiliser pthread.
Est-il possible de créer une fonction en C qui fait ça (sans faire hurler le compilateur) :
void* fexec_3(void* arg[4])
{
return (*arg[0])(*arg[1], *arg[2], *arg[3]);
}
C'est à dire une fonction générique qui prend en argument un tableau constitué d'un pointeur de fonction à 3 arguments de type quelconque suivi des 3 arguments en question ; puis exécute la fonction et renvoi le résultat.
Le tout sans cast (généricité oblige) ; ou alors en faisant un cast générique de la fonction *arg[0].
Une telle fonction serait intéressante pour utiliser pthread.
A voir également:
- Pointeur générique c
- Clé générique windows 10 - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Pilote audio generique - Télécharger - Pilotes & Matériel
- Générique docteur house - Forum Audio
4 réponses
je crois que tu ne répond pas vraiment à la question fiddy. son problème c'est de passé un tableau de pointeur dont le premier pointeur est un pointeur de fonction.
je ne vois pas de raison que ça ne fonctionne pas. essai peut être juste de faire un typedef :
Puis dans fexec_3 tu fait un truc du genre :
je ne vois pas de raison que ça ne fonctionne pas. essai peut être juste de faire un typedef :
typedef void* (*fonct)(void*,void*,void*);/: deéclaration non garantit, mais ça y ressemble.
Puis dans fexec_3 tu fait un truc du genre :
fonct f=argv[0]; return f(argv[1],argv[2],argv[3]);en gros l'idée, peut être quelques erreur de '*' ou pas '*'. Mais ça devrait être bon.
Je ne sais pas, essaie, mais en tout cas, ca fera moins cracher le compilateur comme ca :
void* fexec_3(void* arg[4])
{
return (*arg[0](*arg[1], *arg[2], *arg[3]));
}
Aussi, je crois que tu ne peux renvoyer que des fonctions qui renvoie elle meme une valeure. Hors, les fonctions de multi_threading, et l'execution d'un thread en particulier, ne renvoie rien (de memoire). Ca poserai probleme !
void* fexec_3(void* arg[4])
{
return (*arg[0](*arg[1], *arg[2], *arg[3]));
}
Aussi, je crois que tu ne peux renvoyer que des fonctions qui renvoie elle meme une valeure. Hors, les fonctions de multi_threading, et l'execution d'un thread en particulier, ne renvoie rien (de memoire). Ca poserai probleme !
Du coup, j'ai plus rien à rajouter.