Sobes.tech
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:

  1. SFINAE (Substitution Failure Is Not An Error) — mithilfe von std::enable_if und 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
}
  1. 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
}
  1. 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.