cpp / expert
Snippet
SFINAE mit std::enable_if
Substitution Failure Is Not An Error (SFINAE) erlaubt es dem Compiler, Template-Überladungen zu ignorieren, die zu ungültigem Code führen würden. std::enable_if_t nutzt dies, um eine Funktion nur dann zu aktivieren, wenn eine bestimmte Bedingung zur Kompilierzeit (z. B. Ganzzahltyp) erfüllt ist.
snippet.cpp
1
2
3
4
5
6
7
8
9
template <typename T>std::enable_if_t<std::is_integral_v<T>, T>increment(T value) {return value + 1;}// Usage:// auto a = increment(5); // Compiles// auto b = increment(3.14); // Compiler Error
Erklärung
1
std::enable_if_t<std::is_integral_v<T>, T>
Prüft die Bedingung; wenn wahr, ist der Typ T; wenn falsch, wird diese Überladung verworfen.
2
std::is_integral_v<T>
Ein Type-Trait, der prüft, ob T ein eingebauter Ganzzahltyp ist.