Come posso digitare un puntatore a funzione che accetta una funzione del proprio tipo come argomento?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Esempio: una funzione che accetta una funzione (che accetta una funzione (che ...) e un int) e un int.

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

Esplode ricorsivamente dove (...) . C'è una ragione fondamentale per cui ciò non può essere fatto o c'è un'altra sintassi? Mi sembra che dovrebbe essere possibile senza un cast. Sto davvero cercando di passare una tabella di invio, ma potrei capirlo se potessi solo passare questo tipo.

È stato utile?

Soluzione

Puoi avvolgere il puntatore a funzione in una struttura:

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

Non sono sicuro che si tratti di un miglioramento nel casting. Ho il sospetto che sia impossibile senza la struttura poiché C richiede che i tipi siano definiti prima di essere utilizzati e non c'è sintassi opaca per typedef.

Altri suggerimenti

È impossibile farlo direttamente. Le uniche opzioni disponibili sono fare in modo che l'argomento del puntatore a funzione accetti argomenti non specificati o accettare un puntatore a una struttura contenente il puntatore a funzione, come suggerito 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 (*)());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top