Heim >Backend-Entwicklung >C++ >Warum können abgeleitete Vorlagenklassen nicht direkt auf Basis-Vorlagenklassen-IDs zugreifen?
Warum abgeleitete Vorlagenklassen den Zugriff auf Basis-Vorlagenklassen-Bezeichner verlieren
In C hat eine abgeleitete Vorlagenklasse möglicherweise keinen direkten Zugriff auf die Bezeichner seiner Basis-Template-Klasse. Dieses als zweiphasige Suche bezeichnete Verhalten wird durch die C-Spezifikation erzwungen.
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(); }
In diesem Beispiel kann die abgeleitete Klasse Derived nicht direkt auf die zugreifen NO_ZEROFILL-Bezeichner aus seiner Basisklasse Base. Dies liegt daran, dass der Compiler während der Vorlagendefinitionsphase nicht über einen tatsächlichen Typ verfügt, der T ersetzt. Daher kann er die in Base
Dieses Verhalten stellt sicher, dass die Bedeutung von Bezeichnern in Vorlagenklassen klar definiert ist, selbst wenn die Klasse mit unterschiedlichen Typen instanziiert wird. Jede Instanziierung von Base
Um das Problem im bereitgestellten Code zu beheben, Sie können den Bezeichner NO_ZEROFILL explizit mit dem Basisklassennamen qualifizieren, wie unten gezeigt:
Derived( bool initZero = Base<T>::NO_ZEROFILL );
Das obige ist der detaillierte Inhalt vonWarum können abgeleitete Vorlagenklassen nicht direkt auf Basis-Vorlagenklassen-IDs zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!