cpp / expert
Snippet
Bedingte Template-Logik via Constexpr If
Ermöglicht die selektive Kompilierung von Codepfaden basierend auf Typeigenschaften. Im Gegensatz zum Standard-If verwirft constexpr if den nicht gewählten Zweig während der Kompilierung.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <type_traits>template <typename T>auto compute(T val) {if constexpr (std::is_pointer_v<T>) {return *val;} else {return val;}}// Usage:int x = 10;auto r1 = compute(x); // returns intauto r2 = compute(&x); // returns int
Erklärung
1
if constexpr (std::is_pointer_v<T>)
Wertet die Bedingung zur Kompilierzeit aus; der falsche Zweig wird nicht instanziiert.
2
std::is_pointer_v<T>
Ein Type-Trait, das prüft, ob das Template-Argument ein Zeigertyp ist.
3
return *val;
Wird nur kompiliert, wenn T ein Zeiger ist, was Fehler bei Nicht-Zeigertypen verhindert.