Zugriff auf geerbte Variablen aus der übergeordneten Klasse mit Vorlagen
Der bereitgestellte Codeausschnitt veranschaulicht ein Szenario, in dem die geerbte Klasse Bar versucht, auf geschützte Variablen ihrer Klasse zuzugreifen übergeordnete Klasse Foo, eine auf Vorlagen basierende Klasse. Allerdings generiert der Compiler Fehler, was zu Verwirrung darüber führt, ob der Compiler den Standard einhält.
Gemäß dem C-Standard gelten nicht qualifizierte Namen innerhalb einer Vorlage als nicht abhängig und müssen bei der Definition der Vorlage aufgelöst werden . Da die spezialisierten Basisklassenvorlagen während der Vorlagendefinition möglicherweise nicht verfügbar sind, führen nicht aufgelöste, nicht qualifizierte Namen zu Fehlern.
Dies gilt sowohl für Variablen als auch für Funktionen, die in der Basisklasse deklariert sind, wie im Beispiel zu sehen ist, auf das Bar zugreifen kann a Verwendung qualifizierter Namen oder Verwendung von Deklarationen. Letzteres ermöglicht uneingeschränkten Zugriff innerhalb der abgeleiteten Klasse und behebt den ursprünglichen Fehler.
Zum Beispiel wird das Problem durch die folgenden Codeänderungen behoben:
template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // Qualified name c = this->a * 4; // Pointer to own instance using Foo<T>::a; c = a * 4; // Using declaration }
Durch Klärung der Suchregeln und Bereitstellung alternativer Lösungen Diese Erklärung unterstreicht die Nuancen der Vorlagenauflösung und hilft Entwicklern, die Gründe für das Verhalten des Compilers zu verstehen.
Das obige ist der detaillierte Inhalt vonWie können geerbte Klassen auf geschützte Variablen in übergeordneten Vorlagenklassen in C zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!