Heim >Backend-Entwicklung >C++ >Warum kann in abgeleiteten Klassen nicht auf statische Mitglieder von Basisvorlagenklassen zugegriffen werden?

Warum kann in abgeleiteten Klassen nicht auf statische Mitglieder von Basisvorlagenklassen zugegriffen werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-18 00:34:02647Durchsuche

Why are Static Members of Base Template Classes Inaccessible in Derived Classes?

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::NO_ZEROFILL.

Im zweiphasigen Suchprozess:

  1. Vorläufige Suche:Bezeichner werden innerhalb des aktuellen Bereichs und in zuvor deklarierten Namespaces gesucht.
  2. Vorlageninstanziierung: Sobald eine Vorlage mit bestimmten Typparametern instanziiert wurde, wird eine zweite Suche durchgeführt, um die instanziierten Mitglieder und Bezeichner zu finden.

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::NO_ZEROFILL oder this->NO_ZEROFILL in der abgeleiteten Klasse angeben, um anzugeben, dass es sich um ein Mitglied der Basisklasse handelt, deren Typ wird zum Zeitpunkt der Instanziierung der Vorlage bestimmt.

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!

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