Wie kann ich die folgende zirkuläre Abhängigkeit lösen?
%Vor%Ich versuche, Objekte aus einer CAPI-Datenbankbibliothek in einem C ++ - Formular darzustellen. Diese Datenbank ermöglicht das Speichern von Werten oder Arrays von Werten sowie eine Repräsentation für Strukturen wie folgt:
%Vor%Schließlich wird eine Union verwendet, um einen Wert wie folgt darzustellen:
%Vor%Sie können keine Typen enthalten, die sich gegenseitig enthalten. Denken Sie darüber nach: Der Compiler würde in eine Endlosschleife geraten, die die Daten erzeugt.
Es gibt zwei allgemeine Muster: das erste ist durch Datentypen, die aufeinander verweisen
%Vor%Wenn Sie die Zeiger weglassen und die Even- und Odd-Knoten mit containment by value implementieren, kann der Compiler die Definitionen niemals auflösen.
Im Allgemeinen: Zeichnen Sie einfach ein Bild davon, wie Sie die Daten anordnen möchten, mit Kästchen, die Daten und Linien darstellen, die die verschiedenen Teile verbinden. Ersetzen Sie dann jede Box durch eine Klasse und jede Zeile durch einen Zeiger auf die entsprechende Klasse. Wenn Sie irgendwo eine zirkuläre Abhängigkeit haben, deklarieren Sie einfach die Klassen oben im Code.
Die zweite zirkuläre Abhängigkeit erfolgt durch den Curiously Recurring Template-Parameter (CRTP)
%Vor% Ihr Beispiel würde das CRTP mit Structure
als X
und std::list< ..., Structure>
als Y<X>
verwenden.
Tags und Links c++ circular-dependency forward-declaration