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