Menü

C++-Programmierung: SFINAE-Technik anwenden, Kompilierungsfehler verhindern

Das Ersetzen von Typparametern führt oft zu vermeintlichen Kompilierfehlern. Mit Techniken wie SFINAE lassen diese sich für nützliche Zwecke einsetzen.

Lesezeit: 8 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 1 Beitrag
Von

Inhaltsverzeichnis

SFINAE steht für "Substitution failure is not an error" und bezeichnet eine Regel, die während der Überladungsauflösung von Funktionstemplates gilt. Schlägt das Ersetzen eines explizit angegebenen oder abgeleiteten Typs in der Signatur für den Templateparameter fehl, wird das Funktionstemplate aus dem Überladungssatz entfernt, anstatt einen Kompilierfehler zu verursachen.

Aktuelle und kommende C++-Standards versuchen mit std::enable_if (C++11) oder std::void_t (C++17) die Nutzung von SFINAE zu vereinfachen oder mit constexpr if (C++17) oder Concepts (C++20) einfacher zu nutzende Alternativen zu SFINAE anzubieten. Trotzdem ist der Einsatz von SFINAE noch immer aktuell. C++11 führte Expression SFINAE ein und in C++20 wird SFINAE auf den Explicit Specifier erweitert. Hintergrund ist, dass SFINAE in der Metaprogrammierung immer noch eine notwendige Technik ist, die meisten Type Traits in C++ damit implementiert sind und die Range-Bibliothek in C++20 ausgiebigen Gebrauch davon macht.

Zum Verstehen von Templatemechanismen dient folgendes Beispiel: Überladene Funktionen (tragen den gleichen Namen und unterscheiden sich in der Signatur) stellen bei einem Funktionsaufruf über den Namen mögliche Kandidaten für den eigentlichen Aufruf dar. Der Compiler entscheidet anhand der Argumenttypen und Signaturen, welche Funktion am besten passt, und ruft sie auf:

Immer mehr Wissen. Das digitale Abo für IT und Technik.

  • Zugriff auf alle Inhalte von heise+
  • exklusive Tests, Ratgeber & Hintergründe: unabhängig, kritisch fundiert
  • c't, iX, Technology Review, Mac & i, Make, c't Fotografie direkt im Browser lesen
  • einmal anmelden – auf allen Geräten lesen - jederzeit kündbar
  • erster Monat gratis, danach monatlich 9,95 €
  • Wöchentlicher Newsletter mit persönlichen Leseempfehlungen des Chefredakteurs
GRATIS-Monat beginnen Jetzt GRATIS-Monat beginnen Mehr Informationen zu heise+