cpp / expert
Snippet
Diskreter Event-Dispatch via Funktionszeiger-Arrays
Anstatt große Switch-Case- oder If-Else-Blöcke zu verwenden, die zu Fehlprognosen der Verzweigung führen können, nutzt diese Technik eine Jump-Table (ein Array von Funktionszeigern). Dies ermöglicht einen O(1) Zeit-konstanten Dispatch zur entsprechenden Logik basierend auf einem Index.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
enum class Action { Start, Stop, Pause, Reset, Count };void doStart() {} void doStop() {} void doPause() {} void doReset() {}typedef void (*Handler)();static const Handler jumpTable[] = { doStart, doStop, doPause, doReset };void execute(Action a) {if (a < Action::Count) {jumpTable[static_cast<int>(a)]();}}
Erklärung
1
static const Handler jumpTable[] = { ... };
Definiert ein unveränderliches Array von Funktionszeigern, die den Enum-Werten entsprechen.
2
jumpTable[static_cast<int>(a)]();
Springt direkt zur Code-Adresse, die mit der Aktion verknüpft ist, und umgeht komplexe Verzweigungslogik.