PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : structs und Funktionspointer



Felix G
26.04.2009, 09:20
Hallo Leute,

ich frage mich gerade wie sich folgendes Konstrukt am sinnvollsten in C umsetzen lässt:


typedef struct
{
type_B B;
} type_A;

typedef uint8_t (type_B*)(type_A*);

Das Problem dabei ist natürlich, daß egal in welcher Reihenfolge diese beiden Deklarationen in der .h Datei stehen, sich dieser Code nicht kompilieren lässt (im dargestellten Fall wird type_B benutzt bevor er deklariert wurde, und wenn man die beiden Deklarationen vertauscht ist es eben type_A).

Ich könnte natürlich den Funktionspointer umbauen, und als Parameter ein void* verwenden, aber die Lösung gefällt mir wegen der fehlenden Typprüfung nicht besonders.

SprinterSB
26.04.2009, 12:37
Sowas?


/* Definition */

struct type_A;

typedef char (*type_B)(struct type_A*);

typedef struct type_A
{
type_B B;
} type_A;

/* Anwendung */

char fooB (type_A*);

type_B b = fooB;
type_A a = { fooB };

char dispatch (type_A *a)
{
return a->B (a) + B(a);
}

SprinterSB
26.04.2009, 13:54
im Beispiel muss es natürlich heissen "+b(a)" anstatt "+B(a)"

Felix G
26.04.2009, 17:11
Ah, danke...

manchmal sieht man halt den Wald vor lauter Bäumen nicht