Heim >Backend-Entwicklung >C++ >Warum erfordern Mitgliedsfunktionen von Vorlagenklassen das Schlüsselwort „template', wenn sie aus Vorlagenfunktionen aufgerufen werden?

Warum erfordern Mitgliedsfunktionen von Vorlagenklassen das Schlüsselwort „template', wenn sie aus Vorlagenfunktionen aufgerufen werden?

DDD
DDDOriginal
2024-11-02 07:31:29649Durchsuche

Why Do Member Functions of Template Classes Require the `template` Keyword When Called from Template Functions?

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!

Stellungnahme:
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