gast wrote:
> Hallo eine Frage,
>
> Wie kann ich in C ein Funktionpointer definieren der verschieden
> Funktionen aufnehemen kann. Ich möchte sowas machen:
>
> Einfunktionpointer soll Funktionen der Art
>
>
1 | > void func1(int id, char data);
|
2 | > void func2(int id, char *data);
|
3 | > void func3(int id, int32_t data);
|
4 | >
|
>
> aufnehemen können.
>
> Geht sowas ?
Jepp. Ein void* kann jede Art von Zeiger halten.
1 | void * f1 = func1;
|
2 | void * f2 = func2;
|
3 | void * f3 = func3;
|
Allerdings musst du den void* wieder auf den richtigen Typ casten, weil
ja all deine Funktionen unterschiedlichen Prototyp haben.
Je nach Aufrufkonvention des Compilers crasht das sonst:
1 | typedef void (*func2_t) (int, char*);
|
2 |
|
3 | // Funktion vom Prototyp wie func2 aufrufen
|
4 | void dispatch (void * p)
|
5 | {
|
6 | ((void(*)(int,char*)) p) (1, 'A');
|
7 | // alternativ
|
8 | ((func2_t) p)) (1, 'A');
|
9 | }
|
10 |
|
11 | void dispatch_func2_alike (func2_t f)
|
12 | {
|
13 | f (1, 'A');
|
14 | }
|