Die Originalanalyse zu den C++ Core Guidelines vom 3. März 2018 untersucht, wie sich große switch-Anweisungen in C und C++ wartbar halten lassen. Im Mittelpunkt stehen die Regeln ES.78 und ES.79 sowie der Wechsel zu einer Dispatch-Tabelle mit std::unordered_map.
Bei nicht leeren case-Blöcken verlangt die Regel ES.78 ein sichtbares break. Soll die Ausführung absichtlich in den nächsten Fall durchlaufen, kann C++17 das mit dem Attribut [[fallthrough]] ausdrücken. Die offizielle Fassung der C++ Core Guidelines dokumentiert die Regeln unabhängig von einem konkreten Projekt.
Fallthrough und Default-Fälle klar dokumentieren
Ein fehlendes break kann bei späteren Änderungen unbemerkt weitere Aktionen auslösen. Grimm trennt deshalb zwischen absichtlichem Durchlauf und einem versehentlichen Fehler. Auch default-Fälle sollen nur allgemeine Fälle abfangen. Bei Aufzählungen bleibt sonst unklar, ob neue Werte übersehen wurden oder tatsächlich keine Aktion benötigen.
Dispatch-Tabelle mit std::unordered_map
Als Alternative beschreibt der Beitrag eine Zuordnung von Nachrichtenwerten zu Funktionen. Eine std::unordered_map übernimmt dabei die Auswahl, während std::function die zugehörige Aktion aufruft. Der Ansatz vermeidet implizites Fallthrough und kann bei wachsenden Ereignislisten übersichtlicher werden. Für große Codebasen interaktiver Anwendungen ist diese Trennung besonders dort interessant, wo Eingaben, Ereignisse oder Zustandswechsel regelmäßig erweitert werden.
Die Dispatch-Tabelle ist veränderbar und kann dadurch auch zur Laufzeit angepasst werden. Der Beitrag ordnet die Technik in eine laufende Reihe zu besseren C++-Strukturen ein, die auf XboxDev bereits mit einem früheren Überblick zu den C++ Core Guidelines begonnen wurde.

