Gast
#5215016
Moinsen noch mal, ich habe eine Struktur nach dem Vorbild des Composition Pattern aufgebaut (habe hinterher spitz gekriegt, dass ich ein Pattern umgesetzt habe^^)https://www.tutorialspoint.com/design_pattern/composite_pattern.htm Der Witz besteht ja darin, dass ein Objekt eine Liste von Objekten seines eigenen Types hat - ich nenne sie mal "sibblingsList". In meinem Fall handelt es sich dabei um Zeiger eines Interface-Types "I_Graph" , nicht um die Instanzen selbst. Jetzt gibt es bei mir auf Grund der Anwendung eine Methode >Run(uint16_t* arg) die in den konkreten Implementierungen implementiert wird. Es gibt eine Implementierung des Interfaces "Node" und eine "Calc". "Calc"´s führen eine tatsächliche Rechnung aus wärend "Node"´s bei Aufruf von "Run()" ihre "sibblingsList" durchitterieren und dort "Run()" aufrufen. >>Ich habe ein Interface als Obbjekt und sibblingsList Typ genommen, weil ich in der selben Liste "Node"´s und "Calc"´s halten möchte um eine flexible Berechnungsstruktur aufbauen zu können. >>Punktus Knacktus: >Es besteht die Gefahr, dass man in der sibblingsList im Kreis >referenziert. >Also Instanz A ruft Instanz B ruft Instanz A >>Frage: >Was wäre eurer Meinung ein Ansatz, diese Gefahr zu umgehen? >Nennenswert dabei ist sicher, dass es sich um ein System handelt, welches >vom Nutzer bedient wird, es werden keine Abertausend Nodes existieren. Ein >paar dutzend wharscheinlich. >Von den Ideen die mir gekommen sind, finde ich folgende am elegantesten: Es wird im Interface "I_Graph" eine Methode "DetectLoop(I_Graph* loopTestPtr) vorgesehen. In der Methode wird das Argument mit der eigenen Referenz verglichen. Sind sie identisch, wäre eine Loop gefunden. Soll in eine Node-Instanz("Host-Node" ) die Referenz eines einexistierenden Node hinzugefügt werden, wird zunächst die DetectLoop() im "Host-Node" aufgerufen, mit der Adresse des hinzu zu fügenden Nodes als Argument. Existiert der Node bereits im "Einzugsgebietes" des Host-Nodes würde oben beschriebene DetectLoop() Methode das detektieren.