0 Tage Serie
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 int
auto 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.