Heim > Backend-Entwicklung > C++ > Warum können abgeleitete Vorlagenklassen nicht direkt auf Basis-Vorlagenklassen-IDs zugreifen?

Warum können abgeleitete Vorlagenklassen nicht direkt auf Basis-Vorlagenklassen-IDs zugreifen?

DDD
Freigeben: 2024-11-16 03:01:02
Original
921 Leute haben es durchsucht

Why Can't Derived Template Classes Access Base Template Class Identifiers Directly?

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();
}
Nach dem Login kopieren

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 definierten Bezeichner nicht auflösen. und erfordert, dass sie explizit mit dem Basisklassennamen qualifiziert werden.

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 verfügt über einen eigenen Satz statischer Member „ZEROFILL“ und „NO_ZEROFILL“, und der Compiler überprüft die Gültigkeit des Codes nur, wenn die Vorlage mit einem bestimmten Typargument instanziiert wird.

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 );
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage