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>
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:
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>
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!