Heim > Backend-Entwicklung > C++ > Was definiert „unmittelbaren Kontext' in C 11 SFINAE?

Was definiert „unmittelbaren Kontext' in C 11 SFINAE?

DDD
Freigeben: 2024-12-12 20:17:11
Original
187 Leute haben es durchsucht

What Defines

Unmittelbarer Kontext in C 11 SFINAE

Der C 11-Standard definiert SFINAE (Substitution Failure Is Not An Error) als eine Technik zur bedingten Aktivierung oder Deaktivieren von Code basierend auf dem Abzug von Vorlagenargumenten. Abschnitt 14.8.2/8 beschreibt die Bedingungen, unter denen ein Substitutionsfehler zu einem „harten“ Kompilierungsfehler oder einem „weichen“ Fehler führt, der zu SFINAE führt.

Der Standard bezieht sich in diesem Abschnitt auf einen „unmittelbaren Kontext“. , was darauf hinweist, dass nur ungültige Typen und Ausdrücke im unmittelbaren Kontext des Funktionstyps und seiner Vorlagenparametertypen einen Abzugsfehler verursachen können. Die Definition von „unmittelbarem Kontext“ ist jedoch nicht explizit.

Entscheidungsverfahren für unmittelbaren Kontext

Um festzustellen, ob ein Ersetzungsfehler im unmittelbaren Kontext auftritt, berücksichtigen Sie Folgendes Folgendes:

Stellen Sie sich vor, dass alle Vorlagen und implizit definierten Funktionen, die für die Ersetzung von Vorlagenargumenten erforderlich sind, im Voraus generiert werden. Alle während dieser Vorbereitung auftretenden Fehler stehen nicht im unmittelbaren Kontext und führen zu harten Kompilierungsfehlern.

Wenn der Vorbereitungsschritt erfolgreich abgeschlossen wird, werden alle nachfolgenden Fehler während der Ersetzung (z. B. Verweise auf instanziierte Vorlagen oder implizit definierte Funktionen) behoben in der Signatur der Funktionsvorlage) stellen keinen Fehler dar, sondern führen zu einem Abzug Fehler.

Beispiele

  • Beispiel 1:

    template<typename T>
    void func(typename T::type* arg);
    
    template<typename>
    void func(...);
    
    template<typename T>
    struct A { typedef T* type; };
    
    func<A<int&>>(...);
    Nach dem Login kopieren

    In diesem Beispiel Instanziierung A während der Vorbereitung schlägt fehl, da Zeiger auf Referenzen nicht zulässig sind. Da dieser Fehler vor der Ersetzung auftritt, führt er zu einem harten Kompilierungsfehler.

  • Beispiel 2:

    template<typename T>
    void func(typename T::type* arg);
    
    template<typename>
    void func(...);
    
    template<typename T>
    struct A { typedef T* type; };
    
    template<>
    struct A<char> {};
    
    func<A<char>>(...);
    Nach dem Login kopieren

    In diesem Beispiel ist die Der Vorbereitungsschritt instanziiert erfolgreich A. Während der Ersetzung ist A::type nicht vorhanden, aber dieser Fehler tritt nach der Vorbereitungsphase auf und führt nur zu einem Fehler bei der Argumentableitung und der Verwendung der Fallback-Funktion.

Das obige ist der detaillierte Inhalt vonWas definiert „unmittelbaren Kontext' in C 11 SFINAE?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage