Heim > Backend-Entwicklung > C++ > Warum findet die argumentabhängige Suche in C keine Funktionsvorlagen mit expliziten Vorlagenargumenten?

Warum findet die argumentabhängige Suche in C keine Funktionsvorlagen mit expliziten Vorlagenargumenten?

Patricia Arquette
Freigeben: 2024-12-09 05:42:10
Original
923 Leute haben es durchsucht

Why Does Argument Dependent Lookup Fail to Find Function Templates with Explicit Template Arguments in C  ?

Argument Dependent Lookup und Funktionsvorlagen in C

Argument Dependent Lookup (ADL) ist eine Sprachfunktion, die es dem Compiler ermöglicht, nach Bezeichnern zu suchen innerhalb der Namensräume, die den Argumenten eines Funktionsaufrufs zugeordnet sind. Während ADL normalerweise Funktionen findet, kann es in einigen Szenarien keine Funktionsvorlagen finden.

Die C-Standard-Erklärung

Abschnitt 14.8.1.6 des C-Standards (2003) besagt dass:

"Aber wenn eine Funktionsvorlage mit expliziten Vorlagenargumenten verwendet wird, hat der Aufruf nicht die richtigen syntaktische Form, es sei denn, zum Zeitpunkt des Aufrufs ist eine Funktionsvorlage mit diesem Namen sichtbar. Wenn kein solcher Name sichtbar ist, ist der Aufruf syntaktisch nicht wohlgeformt und die argumentabhängige Suche findet keine Anwendung.“

Beispiel

Betrachten Sie das folgende Beispiel:

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&amp;) {}
    void non_template(foo const&amp;) {}
}

int main() {
    ns::foo f;
    non_template(f); // This is fine.
    frob<0>(f); // This is not.
}
Nach dem Login kopieren

Der letzte Hauptaufruf (frob<0>(f);) kann nicht kompiliert werden, da im Bereich des Aufrufs keine Funktionsvorlage mit dem Namen frob sichtbar ist. ADL kann frob<0> nicht finden. weil Funktionsvorlagen von der Syntax des Compilers nicht als gültige Funktionsaufrufe betrachtet werden.

Zusätzliche Überlegungen

  • Für einfache Funktionsnamen (ohne Vorlagenargumente) kann ADL dies dennoch tun Finden Sie Funktionsvorlagen, auch wenn ihre Namen nicht sichtbar sind.
  • Wenn die Funktionsvorlage jedoch mit expliziten Vorlagenargumenten aufgerufen wird, wird eine Funktionsvorlage mit Dieser spezifische Name muss im Bereich des Aufrufs sichtbar sein, damit ADL erfolgreich ist.
  • In einigen Fällen kann die Verwendung von Deklarationen eine Funktionsvorlage sichtbar machen, sodass ADL sie finden kann.

Das obige ist der detaillierte Inhalt vonWarum findet die argumentabhängige Suche in C keine Funktionsvorlagen mit expliziten Vorlagenargumenten?. 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