Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann der Compiler nicht kompilieren, wenn er eine Template-Member-Funktion innerhalb einer Template-Funktion aufruft?

Patricia Arquette
Freigeben: 2024-11-02 16:08:29
Original
711 Leute haben es durchsucht

Why does the compiler fail to compile when invoking a template member function within a template function?

Aufruf einer Template-Member-Funktion innerhalb von Template-Funktionen

Das bereitgestellte Code-Snippet zeigt einen Fehler, der beim Aufruf einer Template-Member-Funktion aus einer Template-Funktion heraus auftritt :

<code class="cpp">template<class X> struct A {
   template<int I> void f() {}
};

template<class T> void g()
{
   A<T> a;
   a.f<3>();  // Compilation fails here
}</code>
Nach dem Login kopieren

Der Compiler kann diesen Code nicht kompilieren, meldet einen Fehler im Zusammenhang mit einer ungültigen Verwendung des Members und deutet darauf hin, dass „&“ möglicherweise vergessen wurde.

Erklärung

Der Fehler tritt auf, weil der Code versucht, eine Mitgliedsvorlage aufzurufen, ohne vorher explizit das Schlüsselwort „template“ anzugeben. Gemäß dem C-Standard (14.2/4), wenn der Name einer Mitgliedsvorlagenspezialisierung nach einem Punkt oder Pfeil in einem Postfix-Ausdruck oder nach einem verschachtelten Namensspezifizierer in einer qualifizierten ID und dem Postfix-Ausdruck verwendet wird oder die qualifizierte ID explizit von einem Vorlagenparameter abhängt, muss dem Mitgliedsvorlagennamen das Schlüsselwort „template“ vorangestellt werden. Andernfalls wird davon ausgegangen, dass der Name auf eine Nicht-Vorlage verweist.

Lösung

Um dieses Problem zu beheben, muss der Code geändert werden, um die Vorlage explizit anzugeben ' Schlüsselwort vor dem Namen der Mitgliedsvorlage:

<code class="cpp">template<class T> void g()
{
   A<T> a;
   a.template f<3>();  // add 'template' keyword here
}</code>
Nach dem Login kopieren

Mit dieser Änderung kann der Compiler die Funktion der Mitgliedsvorlage korrekt identifizieren und aufrufen, und der Code wird erfolgreich kompiliert.

Das obige ist der detaillierte Inhalt vonWarum kann der Compiler nicht kompilieren, wenn er eine Template-Member-Funktion innerhalb einer Template-Funktion aufruft?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!