Disons que j'ai deux types d'objets, A et B. La relation entre eux est plusieurs-à-plusieurs, mais aucun d'eux n'est propriétaire de l'autre.
Les instances A et B doivent être conscientes de la connexion; ce n'est pas qu'une façon.
Donc, nous pouvons le faire:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
Ma question est: où dois-je mettre les fonctions pour créer et détruire les connexions?
Faut-il que ce soit A :: Attach (B), qui met alors à jour A :: Bs et B :: As vecteurs?
Ou devrait-il être B :: Attach (A), ce qui semble tout aussi raisonnable.
Aucun de ceux-là ne se sent bien. Si j'arrête de travailler avec le code et que je reviens après une semaine, je suis sûr que je ne pourrai pas me rappeler si je devrais faire A.Attach (B) ou B.Attach (A).
Peut-être que cela devrait être une fonction comme celle-ci:
CreateConnection(A, B);
Mais créer une fonction globale semble également indésirable, étant donné qu'il s'agit d'une fonction spécifique pour travailler uniquement avec les classes A et B.
Une autre question: si je rencontre souvent ce problème / cette exigence, puis-je trouver une solution générale? Peut-être une classe TwoWayConnection dont je peux dériver ou utiliser au sein de classes qui partagent ce type de relation?
Quels sont les bons moyens de gérer cette situation ... Je sais comment gérer très bien la situation un-à-plusieurs "C possède D", mais celle-ci est plus délicate.
Edit: Juste pour le rendre plus explicite, cette question n'implique pas de problèmes de propriété. A et B appartiennent à un autre objet Z, et Z s'occupe de tous les problèmes de propriété. Je veux seulement savoir comment créer / supprimer les liens plusieurs-à-plusieurs entre A et B.
Pointer
et GestureRecognizer
. Les pointeurs sont détenus et gérés par la classe InputManager. GestureRecognizers appartiennent à des instances de Widget, qui sont à leur tour détenues par une instance d'écran qui appartient à une instance d'application. Les pointeurs sont assignés à GestureRecognizers afin qu'ils puissent leur fournir des données d'entrée brutes, mais GestureRecognizers doit être conscient du nombre de pointeurs qui leur sont actuellement associés (pour distinguer 1 doigt contre 2 gestes du doigt, etc.).