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
DDDOriginal
2024-11-16 03:01:02895Durchsuche

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();
}

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 );

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!

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