Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können Sie in C auf öffentliche Mitglieder einer Basisklasse mit Vorlagen zugreifen?

Barbara Streisand
Freigeben: 2024-11-01 15:12:31
Original
107 Leute haben es durchsucht

How Can You Access Public Members of a Templated Base Class in C  ?

Unsichtbarkeit öffentlicher Mitglieder bei der Vererbung von Vorlagenklassen

Beachten Sie den folgenden C-Code:

<code class="cpp">class CBase {
public:
    char Arr[32];
    int Fn1();
    int Fn2();
};

class CDerived : public CBase {
public:
    int FnSum();
};</code>
Nach dem Login kopieren

In diesem Code CDerived erbt die öffentlichen Mitglieder von CBase. Wenn dieser Code jedoch als Vorlage erstellt wird und Arr und die Funktionen als Vorlage erstellt werden, werden die öffentlichen Mitglieder von CBase für CDerived unsichtbar.

Lösungen

Um dieses Problem zu beheben, gibt es mehrere Es gibt Lösungen:

  • Lösung #1:Stellen Sie allen Verweisen auf CBase-Mitglieder CBase:: voran, wobei BYTES der Vorlagenparameter ist.
  • Lösung #2:Stellen Sie allen Verweisen auf CBase-Mitglieder das Präfix this-> voran.
  • Lösung #3:Verwenden Sie die using-Anweisung in CDerived, um alle benötigten CBase-Mitglieder zu deklarieren .

Problem mit Lösungen

Lösungen Nr. 1 und Nr. 2 erfordern ausführliche Ergänzungen zum Code, was zu einer Aufblähung und Wiederholung der Quelle führt. Lösung Nr. 4, die die strikte Konformität deaktiviert, ist nicht portierbar und weicht vom C-Standard ab.

Verbesserte Lösung

Um den Code zu vereinfachen, kann man Makros zur Automatisierung verwenden der using-Anweisungszusatz in Lösung Nr. 3:

<code class="cpp">#define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5)

// In CDerived<BYTES>, in a `public:` section
USING_CBASE(BYTES);</code>
Nach dem Login kopieren

Dieses Makro generiert automatisch die erforderlichen using-Anweisungen für alle Mitglieder von CBase, die in CDerived verwendet werden.

Das obige ist der detaillierte Inhalt vonWie können Sie in C auf öffentliche Mitglieder einer Basisklasse mit Vorlagen 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!