Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erfordert GCC expliziten Mitgliedszugriff für Mitglieder der Vorlagenbasisklasse?

Warum erfordert GCC expliziten Mitgliedszugriff für Mitglieder der Vorlagenbasisklasse?

DDD
DDDOriginal
2024-11-01 10:52:02850Durchsuche

Why Does GCC Require Explicit Member Access for Template Base Class Members?

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!

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