C++ Core Guidelines: switch-Anweisungen mit Fallthrough und Dispatch-Tabellen

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.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein