Dynamische Funktionen?
-
Hallo Zusammen,
Ich habe hier folgendes Konstrukt vor mir und weis nicht wie man das nennt, würde gerne mehr darüber nachlesen:
static void _MsgX(void *Dummy) { } static void _MsgY(STR_MSG_Y *Data) { } static void _MsgZ(void *Dummy) { } static struct { int MsgId; int Sz; void (*Fnct)(void*); }LstMsg[MX_MSG]={ {MSG_ID_X,sizeof(STR_MSG_ID_X),(void(*)(void*))_MsgX}, {MSG_ID_Y,sizeof(STR_MSG_ID_Y),(void(*)(void*))_MsgY}, {MSG_ID_Z,sizeof(STR_MSG_ID_Z),(void(*)(void*))_MsgZ}}; // Aufruf LstMsg[MsgId].Fnct(&Msg);
Ich sehe auch nicht wirklich den Vorteil davon, hier nicht einfach mit einem Switch/Case die jeweilige Msg an die richtige Funktion weiterzuleiten...wenn ich das ganze erweitern will muss ich ja genauso diverse Strukturen anpassen, die Funktionsliste erweitern und eine neue Funktion schreiben, mit Switch/case müsste ich bloss dort die richtige Funktion aufrufen.
Gruss Bieler
-
Das nennt man Funktionszeiger. Der Hauptunterschied zu einem switch-case ist, dass der Wert eines Funktionszeigers erst zur Laufzeit feststeht und dass man mit diesem Konzept auch generische Funktionen wie z.B. qsort schreiben kann. Das kannst du mit switch-case nicht erreichen.