Sichtbarkeit geschützter und öffentlicher Klassenmitglieder in C-Klassen mit Vorlagen erben
Das Problem der Sichtbarkeit öffentlicher Mitglieder bei der Vererbung wird deutlich, wenn eine Klassenvorlage erbt Mitglieder aus einer anderen Klassenvorlage, wie im bereitgestellten Code veranschaulicht. Ohne ausdrücklich öffentliche Mitglieder neu zu deklarieren oder neu zu definieren, erbt CDerived alle öffentlichen Mitglieder von CBase.
Probleme und Lösungen
Das Erstellen einer Vorlage für diesen Code zeigt jedoch, dass öffentliche Mitglieder von CBase sind werden für CD unsichtbar. Abgeleitet von Compilern, die dem neuesten C-Standard entsprechen. Dieses Sichtbarkeitsproblem kann mit mehreren Lösungen behoben werden:
Nachteile bestehender Lösungen
Obwohl diese Lösungen effektiv sind, haben sie ihre Nachteile:
Eine weniger ausführliche Lösung
Die Einführung von Makros vereinfacht Lösung Nr. 3 und reduziert wiederholtes Tippen:
<code class="cpp">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) using base::member; #define USING_ALL(base, ...) BOOST_PP_SEQ_FOR_EACH(USING_ONE, base, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES> USING_CBASE(BYTES);</code>
Dieser Code vereinfacht die Using-Anweisungen erheblich, verbessert die Lesbarkeit des Codes und reduziert sich wiederholende Bearbeitungen.
Das obige ist der detaillierte Inhalt vonWarum sind öffentliche Klassenmitglieder unsichtbar, wenn sie C-Klassen mit Vorlagen erben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!