Heim > Backend-Entwicklung > C++ > Warum schlägt die Ableitung meines C-Vorlagenarguments in nicht abgeleiteten Kontexten fehl?

Warum schlägt die Ableitung meines C-Vorlagenarguments in nicht abgeleiteten Kontexten fehl?

Barbara Streisand
Freigeben: 2024-12-06 09:45:13
Original
940 Leute haben es durchsucht

Why Does My C   Template Argument Deduction Fail in Nondeduced Contexts?

Fehler bei der Ableitung von Vorlagenargumenten: Nicht abgeleitete Kontexte verstehen

In Ihrem Code haben Sie zwei Funktionen (temp und temp2) definiert, die dies beabsichtigen Leiten Sie die Vorlagenargumente basierend auf den Parametertypen ab. Es treten jedoch Compilerfehler auf, die besagen, dass diese Argumente nicht abgeleitet werden können.

Das Problem ergibt sich aus der Verwendung des Schlüsselworts „typename“ in den Funktionsdefinitionen:

// Example 1
template <class A>
A temp(typename S<A>::type a1)

// Example 2
template <class A, class B>
B temp2(typename S<A>::type a1, B a2)
Nach dem Login kopieren

Bei Verwendung von Vorlagenparametern , Typname ist erforderlich, um auf abhängige Namen innerhalb der Vorlagenklasse zu verweisen. Dies ist jedoch im Kontext Ihrer Funktionen nicht der Fall, wo S::type einfach ein nicht abhängiger Typ ist.

In C erfolgt der Abzug von Vorlagenargumenten, wenn ein Vorlagenparameter verwendet wird ein Kontext, der seinen Typ bestimmt. In diesem Fall wird der Vorlagenparameter A jedoch in einem nicht abgeleiteten Kontext verwendet, da er nur in der Deklaration eines Referenztyps vorkommt:

typedef typename T& type;
Nach dem Login kopieren

Daher kann der Compiler das Vorlagenargument nicht daraus ableiten der Funktionsaufruf. Um dieses Problem zu beheben, müssen Sie das Vorlagenargument beim Aufruf dieser Funktionen explizit angeben:

temp<char>(c);
Nach dem Login kopieren

Durch die Bereitstellung des expliziten Arguments kann der Compiler die Vorlage korrekt mit dem entsprechenden Typ instanziieren.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Ableitung meines C-Vorlagenarguments in nicht abgeleiteten Kontexten fehl?. 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