Junior — Middle
Wie kann man Einschränkungen für die Typen in Template-Parametern in C++ festlegen?
sobes.tech KI
Antwort von AI
In C++ können Einschränkungen für Typen in Template-Parametern auf verschiedene Weisen festgelegt werden:
- SFINAE (Substitution Failure Is Not An Error) — mithilfe von
std::enable_ifund anderen Meta-Funktionen aus<type_traits>können Template-Funktionen oder -Klassen je nach Eigenschaften der Typen ein- oder ausgeschlossen werden.
#include <type_traits>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
// Implementierung für Ganzzahltypen
}
int main() {
foo(10); // OK, int ist ganzzahlig
// foo(3.14); // Kompilierungsfehler, double passt nicht
}
- Concepts — ab C++20 können Concepts für lesbarere und deklarative Einschränkungen von Typen verwendet werden.
#include <concepts>
template<std::integral T>
void foo(T value) {
// Implementierung für Ganzzahltypen
}
- Statische Assertions (
static_assert) — innerhalb eines Templates kann man die Eigenschaften des Typs prüfen und bei Bedarf einen Kompilierungsfehler mit einer Nachricht auslösen.
#include <type_traits>
template<typename T>
void foo(T value) {
static_assert(std::is_integral_v<T>, "T muss ein ganzzahliger Typ sein");
// ...
}
Auf diese Weise helfen Einschränkungen, Templates sicherer und verständlicher zu machen.