Heim > Backend-Entwicklung > C++ > Wie bestimmt die Teilreihenfolge die Spezialisierung zwischen Funktionsvorlagen?

Wie bestimmt die Teilreihenfolge die Spezialisierung zwischen Funktionsvorlagen?

Barbara Streisand
Freigeben: 2024-12-02 07:18:12
Original
773 Leute haben es durchsucht

How Does Partial Ordering Determine Specialization Between Function Templates?

Partielles Ordnungsverfahren beim Vorlagenabzug

Das teilweise Ordnungsverfahren beim Vorlagenabzug bestimmt die Spezialisierungsbeziehung zwischen zwei Funktionsvorlagen. Es umfasst zwei Stufen:

Stufe 1: Transformation

Für jede Vorlage erstellt das Teilordnungsverfahren einen „transformierten Funktionstyp“, indem alle Typen und Nichttypen ersetzt werden und Vorlagenparameter mit eindeutigen, nicht verwendeten Typen.

Stufe 2: Vergleich

Die transformierten Funktionstypen werden auf zwei Arten verglichen:

  • Vorwärtsabgleich:Der transformierte Funktionstyp von Vorlage 1 wird mit dem Original abgeglichen Funktionstyp von Vorlage 2.
  • Rückwärtsabgleich: Der transformierte Funktionstyp von Vorlage 2 wird mit dem abgeglichen ursprünglicher Funktionstyp der Vorlage 1.

Wenn einer der Treffer erfolgreich ist und der andere fehlschlägt, gilt die Vorlage mit dem erfolgreichen Treffer als spezialisierter. Wenn keine Übereinstimmung erfolgreich ist, ist keine Vorlage spezialisierter.

Beispiel:

Betrachten Sie die folgenden zwei Funktionsvorlagen:

template<typename T, typename U>
void foo(T, U); // Template 1

template<typename T>
void foo(T const*, X<T>); // Template 2
Nach dem Login kopieren

Zur Bestimmung Welche Vorlage spezialisierter ist, wir:

1. Erstellen Sie transformierte Funktionstypen:

  • Vorlage 1 transformiert: void foo(int, bool)
  • Vorlage 2 transformiert: void foo(char const*, X)

2. Vergleichen Sie transformierte Funktionstypen:

  • Vorwärtsabgleich: void foo(int, bool) kann nicht mit void foo(T const*, X) abgeglichen werden.
  • Rückwärtsabgleich: void foo(char const*, X) kann mit void foo(T, U) by abgeglichen werden Ableiten von T = char const* und U = X.

Schlussfolgerung: Vorlage 2 ist spezialisierter als Vorlage 1.

Das obige ist der detaillierte Inhalt vonWie bestimmt die Teilreihenfolge die Spezialisierung zwischen Funktionsvorlagen?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage