C++: std::enable_if negieren
English
Deutsch
Siehe auch std::enable_if Minimalbeispiel und std::enable_if und std::is_floating_point Minimalbeispiel
Da das Template-Argument für std::enable_if ein boolescher Wert ist, können Sie es einfach mit dem !-Operator negieren.
Beispiel:
enable_if_negation_example.cpp
// Diese Funktion verwendet normales (nicht-negiertes) std::enable_if:
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
T mySineFloatingPointOnly(T arg) {
return sin(arg);
}
// Diese Funktion verwendet negiertes std::enable_if:
template<typename T, typename std::enable_if<!std::is_floating_point<T>::value>::type* = nullptr>
T mySineNOFloatingPoint(T arg) {
return sin(arg);
}Vollständiges Beispiel:
enable_if_negation_full.cpp
#include <iostream>
#include <type_traits>
#include <cmath>
using std::cout;
using std::endl;
template<typename T>
T mySine(T arg) {
return sin(arg);
}
template<typename T, typename std::enable_if<std::is_floating_point<T>::value>::type* = nullptr>
T mySineFloatingPointOnly(T arg) {
return sin(arg);
}
template<typename T, typename std::enable_if<!std::is_floating_point<T>::value>::type* = nullptr>
T mySineNOFloatingPoint(T arg) {
return sin(arg);
}
int main() {
cout << mySine(1.5) << endl;
// mySine(1) funktioniert
// mySineFloatingPointOnly(1) führt zu Kompilierfehler
// mySineNOFloatingPoint(1.5) führt zu Kompilierfehler
cout << mySineFloatingPointOnly(1.5) << endl;
cout << mySineNOFloatingPoint(1) << endl;
}Check out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow