Heim >Backend-Entwicklung >C++ >Warum kann in abgeleiteten Klassen nicht auf statische Mitglieder von Basisvorlagenklassen zugegriffen werden?
Sichtbarkeit von Basis-Template-Klassen-IDs in abgeleiteten Template-Klassen
Beachten Sie den folgenden Codeausschnitt:
template<typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; }; template<typename T> class Derived : public Base<T> { public: Derived(bool initZero = NO_ZEROFILL); // NO_ZEROFILL is not visible ~Derived(); };
Wann Diese mit GCC g 3.4.4 (cygwin) kompilierte Codekompilierung schlägt fehl, da NO_ZEROFILL für die Vorlagenklasse Derived nicht sichtbar ist. Dieses Verhalten kann auf eine zweiphasige Suche in C zurückgeführt werden.
Zweiphasige Suche in C
Wenn der Compiler auf eine Vorlagendeklaration stößt, führt er nur eine vorläufige Aktion durch Suche nach Bezeichnern, die in dieser Vorlage verwendet werden. Da der tatsächliche Typ für T zu diesem Zeitpunkt noch nicht bestimmt ist, kann der Compiler keine Bezeichner auflösen, die von diesem Typ abhängen, wie z. B. Base
Im zweiphasigen Suchprozess:
In diesem Fall NO_ZEROFILL ist bei der vorläufigen Suche nicht sichtbar, da es vom unbekannten Typ T abhängt. Daher müssen Sie explizit Base
Das obige ist der detaillierte Inhalt vonWarum kann in abgeleiteten Klassen nicht auf statische Mitglieder von Basisvorlagenklassen zugegriffen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!