Heim > Backend-Entwicklung > C++ > Wie kann eine mit Vorlagen versehene Klasse geschützte Mitglieder von ihrer abhängigen Basisklasse erben und darauf zugreifen?

Wie kann eine mit Vorlagen versehene Klasse geschützte Mitglieder von ihrer abhängigen Basisklasse erben und darauf zugreifen?

Patricia Arquette
Freigeben: 2024-12-02 05:55:11
Original
215 Leute haben es durchsucht

How Can a Templated Class Inherit and Access Protected Members from its Dependent Base Class?

Auflösung abhängiger Namen bei der vorlagenbasierten Vererbung

In C hängt die Möglichkeit, auf geerbte Variablen zuzugreifen, von der Art der Vererbung und dem Kontext ab. Betrachten Sie den folgenden Code, in dem Bar von einer Vorlagenklasse Foo erbt:

template<class T> class Foo { ... };
template<class T> class Bar : public Foo<T> { ... };
Nach dem Login kopieren

In diesem Szenario stellt sich die Frage: Kann Bar auf die geschützte Variable a von Foo zugreifen?

Standardkonformität und Begründung

Neue Versionen des GNU C-Compilers halten sich an den C-Standard, der besagt, dass nicht qualifizierte Namen in Vorlagen verwendet werden sind unabhängig. Dies bedeutet, dass diese Namen bei der Definition der Vorlage aufgelöst werden müssen. Da jedoch die Definition einer abhängigen Basisklasse (Foo) zu diesem Zeitpunkt unbekannt ist, können unqualifizierte Namen in Bar nicht aufgelöst werden.

Lösung: Explizite Namensauflösung

Um auf a zuzugreifen, muss Bar explizit seinen qualifizierten Namen angeben: Foo::a. Alternativ kann eine „using“-Deklaration innerhalb von Bar verwendet werden:

using Foo<T>::a;
int c = a * 4; // Accesses 'a' through namespace resolution
Nach dem Login kopieren

Zusammenfassend lässt sich sagen, dass es für Bar zwar intuitiv erscheinen mag, die geschützte Variable a von Foo zu erben, der C-Standard schreibt jedoch vor, dass dies nur möglich ist durch explizite Namensauflösung oder „using“-Deklarationen. Dies gewährleistet ein konsistentes und klar definiertes Verhalten über verschiedene Vorlageninstanziierungen hinweg.

Das obige ist der detaillierte Inhalt vonWie kann eine mit Vorlagen versehene Klasse geschützte Mitglieder von ihrer abhängigen Basisklasse erben und darauf zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage