0 Tage Serie
cpp / expert
Snippet

Kompilierzeit-Verzweigung mit SFINAE und enable_if

Nutzt 'Substitution Failure Is Not An Error' (SFINAE) und std::enable_if, um Funktionsüberladungen zur Kompilierzeit basierend auf Typeigenschaften auszuwählen. Dies ermöglicht hochoptimierte, typspezifische Logik ohne Laufzeit-Overhead.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
compute(T val) {
return val * 2; // Logic for integers
}
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
compute(T val) {
return val / 2.0; // Logic for floats
}
// Usage: compute(10); compute(10.5);
Erklärung
1
std::enable_if<std::is_integral<T>::value, T>::type
Stellt sicher, dass diese Überladung nur existiert, wenn T ein ganzzahliger Typ ist.
2
compute(T val)
Die Funktionssignatur ist nur gültig, wenn die enable_if-Bedingung erfüllt ist.