[BraLUG] C-Frage: Pointer auf Funktionen mit unterschiedlicher Anzahl von Parametern?
Uwe Berger
bergeruw at gmx.net
Fr Mai 21 15:13:40 CEST 2010
MoinMoin,
nach einigem Rumüberlegen und -diskutieren mit anderen Leuten, sieht meine
Lösung erstmal so aus (Max, dein Ansatz passt nicht ganz, weil ich bei der
Ziellösung ein indizierbares Array mit den Funktionspointern benötige;
hatte ich nicht erwähnt...;-)):
#define FUNC_VOID_VOID 0
#define FUNC_VOID_INT 1
#define FUNC_VOID_INT_INT 2
typedef struct {
char* funct_name;
union ftp {
void (*VoidFuncVoid)(void);
void (*VoidFuncInt)(int);
void (*VoidFuncIntInt)(int, int);
} funct_ptr;
uint8_t type;
uint8_t arg_count;
} callfunct_t;
void a(void) {
printf("a");
}
void b(int p1) {
printf("b: p1=%i", p1);
}
void c(int p1, int p2) {
printf("c: p1=%i; p2=%i", p1, p2);
}
callfunct_t callfunct[] = {
{"a", .funct_ptr.VoidFuncVoid = a, FUNC_VOID_VOID, 0},
{"b", .funct_ptr.VoidFuncInt = b, FUNC_VOID_INT, 1},
{"c", .funct_ptr.VoidFuncIntInt = c, FUNC_VOID_INT_INT, 2}
};
int main(void) {
callfunct[0].funct_ptr.VoidFuncVoid();
callfunct[1].funct_ptr.VoidFuncInt(1);
callfunct[2].funct_ptr.VoidFuncIntInt(1, 2);
return 0;
}
funct_name und arg_count in der Tabelle benötige ich zum "Finden" des
gewünschten Tabelleneintrages bzw. um in einer Wrapper-Funktion die
Parameter auszulesen. (Die Funktionsaufrufe in main() sind nur testweise
und sehen im Zielprogramm etwas anders aus...).
Mir ist bewusst, dass es eine Dirty-Lösung ist (wg. den unterschiedlichen
und überlagerten Pointer-Definitionen in der Struktur-Definition), aber
etwas besseres kam bei den Überlegungen noch nicht raus.
Vielleicht hat ja noch jemand eine schicke Idee?
Grüße Uwe
Mehr Informationen über die Mailingliste Bralug