Heim >Backend-Entwicklung >C++ >Wie kann ich die Unsichtbarkeit von Mitgliedern und das Aufblähen von Quellcode in geerbten Klassenvorlagen vermeiden?

Wie kann ich die Unsichtbarkeit von Mitgliedern und das Aufblähen von Quellcode in geerbten Klassenvorlagen vermeiden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 05:38:27179Durchsuche

How Can I Avoid Member Invisibility and Source Code Bloat in Inherited Class Templates?

Vermeidung der Unsichtbarkeit von Mitgliedern und des Aufblähens von Quellcode mit geerbten Klassenvorlagen

Das Problem tritt auf, wenn eine Klassenvorlage, CDerived, von einer Basis erbt Klassenvorlage, CBase und alle öffentlichen Mitglieder von CBase werden für CDerived unsichtbar, wenn der Code mit aktivierter Standard-C-Konformität kompiliert wird.

Lösungen für das Problem:

Lösung Nr. 1: Explizite Qualifizierung

Präfixverweise auf CBase-Mitglieder in CDerived mit CBase::, z. B. wird Fn1() zu CBase::Fn1(). Dadurch wird die Namenssuche im Basisklassenbereich erzwungen, wodurch die Mitglieder sichtbar werden. Diese Lösung erfordert jedoch viele ausführliche Ergänzungen zum Code, was zu einer Aufblähung des Quellcodes führt.

Lösung #2: this-> Präfix

Verweisen auf CBase-Mitglieder mit this-> voranstellen, z. B. wird Fn1() zu this->Fn1(). Dies macht auch die Mitglieder sichtbar, erfordert aber wiederum ausführliche Codeänderungen.

Lösung Nr. 3: Verwenden von Anweisungen

Fügen Sie using-Anweisungen in CDerived hinzu, um CBase-Mitglieder zu importieren, z. B. mit CBase::Fn1; mit CBase::Fn2;. Dies erfordert nur eine using-Anweisung pro Mitglied, das in CDerived verwendet wird, aber eine pauschale Anweisung zum Import aller Mitglieder gibt es nicht.

Lösung Nr. 4: Nicht standardmäßiger zulässiger Modus

Deaktivieren Sie die strikte C-Konformität in den Compiler-Einstellungen, um das Problem bei der Namenssuche zu unterdrücken. Dies ist jedoch eine globale Lösung, die vom Standard abweicht und nicht portierbar ist.

Eine prägnantere Lösung #5:

Um die Ausführlichkeit von Lösung # zu reduzieren 3, Makros können verwendet werden, um die erforderlichen Using-Anweisungen zu generieren.

Implementierung:

Fügen Sie die Boost-Präprozessorbibliothek ein und definieren Sie ein Makro, USING_ONE, um ein einzelnes Using zu generieren Anweisung für ein bestimmtes Basismitglied.

Definieren Sie ein weiteres Makro, USING_ALL, um eine Folge von Using-Anweisungen für alle angegebenen Basismitglieder zu generieren.

Definieren Sie in der Basisklassenvorlage ein Makro, USING_CBASE, um die using-Anweisungen für alle geschützten und öffentlichen Mitglieder zu generieren, die in abgeleiteten Klassenvorlagen verwendet werden.

Verwenden Sie innerhalb der abgeleiteten Klassenvorlage das entsprechende USING_CBASE-Makro, um die erforderlichen Mitglieder mithilfe der zuvor definierten Makros zu importieren. Dieser Prozess erfordert nur minimales Suchen und Eingeben, wodurch das Aufblähen des Quellcodes reduziert und gleichzeitig die Portabilität gewahrt bleibt.

Das obige ist der detaillierte Inhalt vonWie kann ich die Unsichtbarkeit von Mitgliedern und das Aufblähen von Quellcode in geerbten Klassenvorlagen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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