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&) {} void non_template(foo const&) {} } int main() { ns::foo f; non_template(f); // This is fine. frob<0>(f); // This is not. }
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
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!