C++-Diamantproblem - So rufen Sie die Basismethode nur einmal auf

Blog

C++-Diamantproblem - So rufen Sie die Basismethode nur einmal auf

C++-Diamantproblem - So rufen Sie die Basismethode nur einmal auf

Ich verwende Mehrfachvererbung in C++ und erweitere Basismethoden, indem ich ihre Basis explizit aufrufe. Nehmen Sie die folgende Hierarchie an:



print

Was entspricht

Creature::print()

Dies stellt nun ein Problem dar - die Ente anrufen |_+_| -Methode ruft ihre jeweiligen Basismethoden auf, die wiederum alle |_+_| . aufrufen -Methode, sodass sie am Ende zweimal aufgerufen wird -



 Creature /  Swimmer Flier  / Duck 

Ich möchte einen Weg finden, um sicherzustellen, dass die Basismethode nur einmal aufgerufen wird. Etwas Ähnliches wie bei der virtuellen Vererbung (Aufruf des Basiskonstruktors beim ersten Aufruf, dann Zuweisen eines Zeigers darauf bei nachfolgenden Aufrufen von anderen abgeleiteten Klassen).

Gibt es dafür eine eingebaute Möglichkeit oder müssen wir selbst eine implementieren?



Wenn ja, wie würden Sie das angehen?

Die Frage ist nicht spezifisch für das Drucken. Ich habe mich gefragt, ob es einen Mechanismus gibt, um Basismethoden und -funktionen zu erweitern, während die Aufrufreihenfolge beibehalten und das Diamantproblem vermieden wird.

Ich verstehe jetzt, dass die bekannteste Lösung darin besteht, Hilfsmethoden hinzuzufügen, aber ich habe mich nur gefragt, ob es einen saubereren Weg gibt.

#c++