Heim > Artikel > Backend-Entwicklung > Warum erfordern Mitgliedsfunktionen von Vorlagenklassen das Schlüsselwort „template“, wenn sie aus Vorlagenfunktionen aufgerufen werden?
Memberfunktionen von Template-Klassen: Aufruf aus Templatefunktionen
In C tritt ein eigenartiger Kompilierungsfehler auf, wenn versucht wird, eine Memberfunktion von aufzurufen eine Vorlagenklasse innerhalb einer Vorlagenfunktion, ohne das Schlüsselwort „template“ explizit anzugeben. Betrachten Sie den folgenden Code:
template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Error! }
Der Compiler stellt in Zeile 18 einen Fehler fest, der darauf hinweist, dass der Name der Mitgliedsfunktion nicht erkannt wird. Dies liegt daran, dass, wie im C-Standard (14.2/4) angegeben, dem Namen einer Mitgliedsvorlagenspezialisierung beim Aufruf in bestimmten Szenarios das Schlüsselwort „template“ vorangestellt werden muss.
Um das Problem zu beheben, ändern Sie einfach die Code, um das Schlüsselwort „template“ explizit einzuschließen:
template<class T> void g() { A<T> a; a.template f<3>(); // Add `template` keyword here }
Der aktualisierte Code wird erfolgreich kompiliert, da er den Anforderungen des Standards entspricht und angibt, dass der Name der Mitgliedsvorlage mit dem Schlüsselwort „template“ qualifiziert werden muss, wenn er im Kontext von a verwendet wird Vorlagenfunktion.
Das obige ist der detaillierte Inhalt vonWarum erfordern Mitgliedsfunktionen von Vorlagenklassen das Schlüsselwort „template“, wenn sie aus Vorlagenfunktionen aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!