Angenommen, ich habe zwei Objekttypen, A und B. Die Beziehung zwischen ihnen ist viele-zu-viele, aber keiner von ihnen ist der Besitzer des anderen.
Sowohl A- als auch B-Instanzen müssen sich der Verbindung bewusst sein. Es ist nicht nur ein Weg.
Also können wir das tun:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
Meine Frage ist: Wo platziere ich die Funktionen zum Erstellen und Zerstören der Verbindungen?
Sollte es A :: Attach (B) sein, das dann die Vektoren A :: Bs und B :: As aktualisiert?
Oder sollte es B :: Attach (A) sein, was ebenso vernünftig erscheint.
Keiner von beiden fühlt sich richtig an. Wenn ich aufhöre, mit dem Code zu arbeiten, und nach einer Woche zurückkomme, kann ich mich sicher nicht erinnern, ob ich A.Attach (B) oder B.Attach (A) ausführen soll.
Vielleicht sollte es eine Funktion wie diese sein:
CreateConnection(A, B);
Das Erstellen einer globalen Funktion erscheint jedoch auch unerwünscht, da es sich um eine Funktion handelt, die speziell für die Arbeit mit nur den Klassen A und B vorgesehen ist.
Eine andere Frage: Wenn ich häufig auf dieses Problem / diese Anforderung stoße, kann ich dann irgendwie eine allgemeine Lösung dafür finden? Vielleicht eine TwoWayConnection-Klasse, die ich von Klassen ableiten oder in Klassen verwenden kann, die diese Art von Beziehung teilen?
Was sind einige gute Möglichkeiten, um mit dieser Situation umzugehen ... Ich weiß, wie man mit der Eins-zu-Viele-Situation "C besitzt D" recht gut umgeht, aber diese ist schwieriger.
Bearbeiten: Nur um es deutlicher zu machen, beinhaltet diese Frage keine Eigentumsfragen. Sowohl A als auch B gehören einem anderen Objekt Z, und Z kümmert sich um alle Eigentumsfragen. Ich bin nur daran interessiert, wie man die vielen-zu-vielen-Verknüpfungen zwischen A und B erstellt / entfernt.
Pointer
und GestureRecognizer
. Zeiger gehören der InputManager-Klasse und werden von ihr verwaltet. GestureRecognizers gehören Widget-Instanzen, die wiederum einer Screen-Instanz gehören, die einer App-Instanz gehört. Zeiger werden GestureRecognizern zugewiesen, damit sie ihnen rohe Eingabedaten zuführen können. GestureRecognizer müssen jedoch wissen, wie viele Zeiger derzeit mit ihnen verknüpft sind (um zwischen 1-Finger- und 2-Finger-Gesten usw. zu unterscheiden).