Template-Member-Funktionsaufruf innerhalb der Template-Funktion
Im angegebenen Code ein Versuch, eine Template-Member-Funktion f innerhalb einer Template-Funktion g aufzurufen schlägt mit Kompilierungsfehlern fehl:
<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 (Line 18) }</code>
Gemäß dem C-Standard (14.2/4), wenn eine Mitgliedsvorlagenspezialisierung vorliegt Wird nach einem . aufgerufen, muss das Schlüsselwort template explizit angegeben werden, um es von einer Nicht-Template-Mitgliedsfunktion zu unterscheiden.
Um den Kompilierungsfehler zu beheben, sollte der Code wie folgt geändert werden:
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add `template` keyword here }</code>
Durch das Hinzufügen des Schlüsselworts „template“ erkennt der Compiler, dass es sich bei der aufgerufenen Funktion um eine Member-Template-Spezialisierung handelt, wodurch die Mehrdeutigkeit behoben wird und der Code erfolgreich kompiliert werden kann.
Das obige ist der detaillierte Inhalt vonWarum schlägt der Aufruf einer Template-Member-Funktion innerhalb einer Template-Funktion in C fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!