Strikte Durchsetzung der Abhängigkeit von Vorlagenargumenten durch GCC
Der vorgestellte Code wirft ein Problem auf, das bei der Verwendung von GCC auftritt, jedoch nicht mit Visual Studio. Der folgende Code:
<code class="cpp">template <typename T> class A { public: T foo; }; template <typename T> class B: public A<T> { public: void bar() { cout << foo << endl; } };
kann nicht mit GCC kompiliert werden, wird aber erfolgreich mit Visual Studio kompiliert. Der Fehler fordert den Entwickler auf, dies hinzuzufügen-> auf den Ausdruck, um auf das Mitglied foo in der Methodenleiste zuzugreifen.
Dieses Verhalten ist auf die strikte Einhaltung der C-Spezifikationen durch GCC zurückzuführen. Frühere Versionen von GCC leiteten den Mitgliedszugriff von Vorlagenbasisklassen ab, indem sie diese analysierten. ISO C hält diese Schlussfolgerung jedoch für potenziell problematisch und hat sie abgelehnt.
Die Lösung in diesem Szenario besteht darin, mithilfe von this-> explizit auf das Mitglied foo zu verweisen. oder um die Basisklasse explizit anzugeben, wie im folgenden Beispiel gezeigt:
<code class="cpp">template <typename T> class A { public: T foo; }; template <typename T> class B: public A<T> { public: void bar() { cout << A<T>::foo << endl; } };</code>
Auf diese Weise kann GCC den Typ der Basisklasse bestimmen und den Mitgliedszugriff entsprechend auflösen.
Das obige ist der detaillierte Inhalt vonWarum erfordert GCC expliziten Mitgliedszugriff für Mitglieder der Vorlagenbasisklasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!