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