Heim > Backend-Entwicklung > C++ > Wie kann ich auf geerbte Variablen von übergeordneten Vorlagenklassen in C zugreifen?

Wie kann ich auf geerbte Variablen von übergeordneten Vorlagenklassen in C zugreifen?

DDD
Freigeben: 2024-12-20 10:34:16
Original
772 Leute haben es durchsucht

How Can I Access Inherited Variables from Templated Parent Classes in C  ?

Zugriff auf geerbte Variablen aus übergeordneten Vorlagenklassen

Als Antwort auf die Anfrage zur Variablenzugänglichkeit in übergeordneten Vorlagenklassen ist es unbedingt erforderlich, dies zu klären Moderne GNU-C-Compiler ab Version 3.4.6 halten sich strikt an den C-Standard. Es schreibt vor, dass unqualifizierte Namen in Vorlagen ausnahmslos unabhängig sind. Folglich wird das Auflösen dieser Namen zum Zeitpunkt der Vorlagendefinition aufgrund der unbekannten Natur abhängiger Basisklassenspezialisierungen, wie im bereitgestellten Codeausschnitt:

template<class T> class Foo
{
public:
  Foo() { a = 1; }

protected:
  int a;
};

template<class T> class Bar : public Foo<T>
{
public:
  Bar() { b = 4; };

  int Perna(int u);

protected:
  int b;

};

template<class T> int Bar<T>::Perna(int u) 
{ 
  int c = Foo<T>::a * 4; // This works
  return (a + b) * u;    // This doesn't
}
Nach dem Login kopieren

Dieses Verhalten ist auf die Anforderung zurückzuführen, nicht qualifizierte Namen zu identifizieren Vorlagendefinition, die aufgrund möglicher zukünftiger Spezialisierungen für abhängige Basisklassen nicht möglich ist. Daher führen Versuche, innerhalb der „Perna“-Methode von „Bar“ unqualifiziert auf die geschützte Variable „a“ zuzugreifen, zu Fehlern.

Um diese Einschränkung zu umgehen, ist es notwendig, den qualifizierten Namen „Foo

using Foo<T>::a;

int c = a * 4; // Now valid
Nach dem Login kopieren

Darüber hinaus unterliegen auch in der Basisklasse deklarierte unqualifizierte Funktionsnamen dieser Einschränkung. Um auf solche Funktionen zuzugreifen, muss man entweder qualifizierte Namen verwenden oder eine „using“-Deklaration bereitstellen.

Das obige ist der detaillierte Inhalt vonWie kann ich auf geerbte Variablen von übergeordneten Vorlagenklassen in C 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage