cpp / expert
Snippet
Typbasierte Verzweigungslogik
Fortgeschrittener Kontrollfluss unter Verwendung von 'if constexpr' für Verzweigungen zur Kompilierzeit. Dies verhindert die Instanziierung ungültiger Codepfade und ermöglicht es generischem Code, unterschiedliche Typen wie Primitive und Objekte mit spezifischen Methoden zu verarbeiten.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>auto process_input(T&& val) {if constexpr (std::is_integral_v<std::decay_t<T>>) {return val * 2;} else if constexpr (std::is_floating_point_v<std::decay_t<T>>) {return val / 2.0;} else if constexpr (requires { val.length(); }) {return val.length();} else {static_assert(false, "Unsupported type passed to process_input");}}
Erklärung
1
if constexpr (std::is_integral_v<std::decay_t<T>>)
Prüft zur Kompilierzeit, ob der bereinigte Typ eine Ganzzahl ist, und verwirft andere Zweige vollständig.
2
else if constexpr (requires { val.length(); })
Verwendet einen C++20 Requirement-Ausdruck (Concept-Syntax), um zu prüfen, ob das Objekt eine length()-Methode hat, bevor diese aufgerufen wird.