Komplexe Funktionsköpfe durch function pointer
-
Eigentlich schreibe ich eine funktion die minima und maxima berechnen soll,
Aber mein Problem liegt bei den Funktionsköpfen// compiler: gcc mingw #include <stdio.h> int func1A(int a,int b,int c) { return 2*a+b-c;} int func1B(int a,int b, int c) { return a+2*b-c;} int func2A(int x, int y,int z,int (*fptr)(int a,int b,int c)) { return fptr(x,y,z)*fptr(-y,-x,z); } int func2B(int x, int y,int z,int (*fptr)(int a,int b,int c)) { return -1*fptr(x,y,z)*fptr(y,x,z); } int bigfun(int x0, int x1, int x2, int (*fptr1) (int x, int y, int z, int (*fptr)(int a,int b,int c)), int (*fptr2)(int a,int b, int c) )// danger! { return fptr1( x0, x1,x2, fptr2); } int main() { int res=0; res =bigfun(1,2,3,func2A,func1A); printf("result:%d\n",res); res =bigfun(1,2,3,func2B,func1B); printf("result:%d\n",res); return 0; }
Wie man leicht sehen kann wird es in der funktion bigfun(...) sehr komplex.
Kann man den Code and dieser Stelle durch typedefs oder etwas ähnliches sparen?(Im echten Problem bekommen die Basisfunktionen 3 arrays und 3 ints mit deren Größe, was sehr unübersichtlich wird.)
Danke
Alex
-
mit einem typedef kannst du das so machen:
[cpp]
typedef int (*name)(int a, int b, int c); // Form: rückgabetyp (*name)(parameter)
-
Vielen Dank.
Hier noch einmal die header, an denen man erkannen das es etwas gebracht hat.
vorher:int func1A(int a,int b,int c); int func1B(int a,int b,int c); int func2A(int x, int y,int z, int (*fptr)(int a,int b,int c) ); int func2A(int x, int y,int z, int (*fptr)(int a,int b,int c) ); int bigfun(int x0, int x1, int x2, int (*fptr1) (int x, int y, int z, int (*fptr)(int a,int b,int c)), int (*fptr2)(int a,int b, int c) );
nachher:
typedef int (*f1type)(int a, int b, int c); typedef int (*f2type)(int a, int b, int c,f1type); int func1A(int a, int b , int c);//int func1A(int a,int b,int c); int func1B(int a,int b,int c); int func2A(int x, int y,int z,f1type ); int func2B(int x, int y,int z,f1type); int bigfun(int x0, int x1, int x2,f2type,f1type); // Yippee!
würde in der definition anstatt:
int func2A(int x, int y,int z,f1type );
auch etwas wie:
f2type func2A
gehen?
Diese variante funktioniert nicht, da der Compiler erwartet das func2A einen f2type pointer zurückgibt, aber gibt es einen Weg( zumindest für den Header) wie man mehrere Funktionen die nach dem gleichen Muster deklariert sind( hier f1type, f2type) effizient deklarieren kann?Alex