Wie kann ich einen Funktionszeiger typedef, die eine Funktion seiner eigenen Art als Argument?

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

  •  03-07-2019
  •  | 
  •  

Frage

Beispiel: Eine Funktion, die eine Funktion nimmt (das braucht eine Funktion (d, ...) und einen int) und einen int

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

Es explodiert rekursiv wo (...). Gibt es einen fundamentalen Grund, dies nicht getan werden kann, oder gibt es eine andere Syntax? Es scheint mir, es sollte ohne Guss möglich sein. Ich versuche wirklich eine Dispatch-Tabelle zu übergeben, aber das kann ich herausfinden, wenn ich nur diese eine Art passieren könnte.

War es hilfreich?

Lösung

Sie können die Funktionszeiger in einer Struktur umhüllen:

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

Ich bin mir nicht sicher, ob dies eine Verbesserung beim Gießen ist. Ich vermute, dass es ohne die Struktur unmöglich ist, weil C-Typen definiert werden muß, bevor sie verwendet wird, und es gibt keine undurchsichtige Syntax für typedef.

Andere Tipps

Es ist unmöglich, direkt zu tun. Ihre einzigen Optionen sind die Funktionszeiger Argument akzeptiert nicht spezifizieren Argumente zu machen, oder einen Zeiger auf eine Struktur, die die Funktionszeiger, wie Dave vorgeschlagen .

// 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 (*)());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top