Comment est-ce que je peux typedef un pointeur de fonction qui prend une fonction de son propre type comme argument?

StackOverflow https://stackoverflow.com/questions/816356

  •  03-07-2019
  •  | 
  •  

Question

Exemple: une fonction qui prend une fonction (qui prend une fonction (que ...) et un int) et un int.

typedef void(*Func)(void (*)(void (*)(...), int), int);

Il explose de manière récursive où (...) . Y a-t-il une raison fondamentale pour que cela ne puisse pas être fait ou existe-t-il une autre syntaxe? Il me semble que cela devrait être possible sans casting. J'essaie vraiment de faire passer une table de répartition, mais je pourrais le comprendre si je pouvais simplement passer ce type.

Était-ce utile?

La solution

Vous pouvez envelopper le pointeur de la fonction dans une structure:

struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
  fnptr fp;
};

Je ne suis pas sûr qu'il s'agisse d'une amélioration du casting. Je soupçonne que c’est impossible sans la structure, car C exige que les types soient définis avant leur utilisation et il n’existe pas de syntaxe opaque pour typedef.

Autres conseils

C'est impossible à faire directement. Vos seules options sont de faire en sorte que l'argument de pointeur de fonction accepte des arguments non spécifiés ou d'accepter un pointeur sur une structure contenant le pointeur de fonction, comme suit: a suggéré Dave .

// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top