Function Pointer - Argumente reduzieren
-
Momentan versuch ich das da:
#include <stdio.h> #include <stdlib.h> typedef struct { void (*add)(int); int value; }Test; void addF(Test *s, int j){ s->value += j; return; } Test *newTest(){ Test *t = malloc(sizeof(Test)); t->value = 0; t->add = &addF(t, int); return t; } int main(int argc, char **argv){ Test *t = newTest(); t->add(1291); printf("%d", t->value); return 0; }
Und da krieg ich (was ich zugegebenermassen auch vermutet hab) ein
test.c:17:17: Fehler: expected expression before »Test« test.c:17:17: Fehler: Zu wenige Argumente für Funktion »addF«
Geht überhaupt, was ich da versuch?
-
Nöö. Nur mit Makros und zwar mit einem Makro pro Objekt, also sehr statisch:
#include <stdio.h> #include <stdlib.h> struct Test; struct Test { int i; void (*add) (struct Test*, int); }; typedef struct Test Test; void add(Test* t, int i) { printf("%d\n", i); } int main() { Test* t = malloc(sizeof(Test)); t->add = add; #define t_add(i) t->add(t, i) t_add(128); }
Da wäre es von der Lesbarkeit her IMO besser, die add(Test*, int)-Funktion direkt zu benutzen. In C++ geht das übrigens wunderbar, Stichworte function object und bind1st. Wobei man das hier nicht brauchen würde.
-
Da versucht jemand C++ nachzubauen. Nein, geht nicht, der this-Zeiger ist bei Methoden C++ implizit, in C muss er explizit sein. D.h. er muss auch bei Methoden explizit uebergeben werden.