Unzugängliche Basis-Template-Klassen-IDs in abgeleiteten Klassen: Ein Fall einer zweiphasigen Suche
Bei der Arbeit mit Template-Klassen ist es wichtig, Folgendes zu tun die Auswirkungen der zweiphasigen Suche verstehen. In C werden Bezeichner innerhalb einer Vorlagenklassendefinition während der Kompilierung nicht vollständig aufgelöst. Stattdessen werden sie während der Vorlageninstanziierung basierend auf den tatsächlich bereitgestellten Typargumenten aufgelöst. Dies kann zu Situationen führen, in denen eine abgeleitete Vorlagenklasse nicht direkt auf Bezeichner ihrer Basisvorlagenklasse zugreifen kann.
Betrachten Sie das folgende Beispiel:
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(); };
In diesem Code erbt die abgeleitete Vorlagenklasse von die Base-Vorlagenklasse. Beim Kompilieren dieses Codes tritt jedoch ein Fehler auf, da die abgeleitete Klasse versucht, den Bezeichner NO_ZEROFILL aus der Basisklasse zu verwenden, ohne ihn mit dem Basisklassennamen zu qualifizieren.
Dieses Verhalten wird durch eine zweiphasige Suche verursacht. Während der ersten Phase der Kompilierung verarbeitet der Compiler die Vorlagendefinition, ohne T durch tatsächliche Typargumente zu ersetzen. Daher kann der Compiler das Vorhandensein spezifischer Bezeichner innerhalb von Base
Um dieses Problem zu beheben, müssen Sie dies explizit angeben der Basisklassenname beim Zugriff auf Bezeichner aus der Basisvorlagenklasse. Dies kann mit Base
Das obige ist der detaillierte Inhalt vonWarum können abgeleitete Vorlagenklassen nicht direkt auf Bezeichner von Basisvorlagenklassen zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!