Digamos que tengo dos tipos de objetos, A y B. La relación entre ellos es de muchos a muchos, pero ninguno de ellos es el dueño del otro.
Ambas instancias A y B deben ser conscientes de la conexión; No es solo una forma.
Entonces, podemos hacer esto:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
Mi pregunta es: ¿ dónde pongo las funciones para crear y destruir las conexiones?
¿Debería ser A :: Attach (B), que luego actualiza A :: Bs y B :: Como vectores?
O debería ser B :: Adjuntar (A), que parece igualmente razonable.
Ninguno de los dos se siente bien. Si dejo de trabajar con el código y vuelvo después de una semana, estoy seguro de que no podré recordar si debería estar haciendo A.Attach (B) o B.Attach (A).
Quizás debería ser una función como esta:
CreateConnection(A, B);
Pero hacer una función global también parece indeseable, dado que es una función específica para trabajar solo con las clases A y B.
Otra pregunta: si me encuentro con este problema / requisito con frecuencia, ¿puedo de alguna manera hacer una solución general para ello? ¿Quizás una clase TwoWayConnection de la que puedo derivar o usar dentro de clases que comparten este tipo de relación?
¿Cuáles son algunas buenas maneras de manejar esta situación? Sé cómo manejar la situación de uno a muchos "C posee D" bastante bien, pero esta es más complicada.
Editar: solo para hacerlo más explícito, esta pregunta no involucra problemas de propiedad. Tanto A como B son propiedad de algún otro objeto Z, y Z se ocupa de todos los problemas de propiedad. Solo me interesa cómo crear / eliminar los enlaces de muchos a muchos entre A y B.
Pointer
y GestureRecognizer
. Los punteros son propiedad y están administrados por la clase InputManager. GestureRecognizers son propiedad de instancias de Widget, que a su vez son propiedad de una instancia de Screen que es propiedad de una instancia de aplicación. Los punteros se asignan a GestureRecognizers para que puedan enviarles datos de entrada sin procesar, pero GestureRecognizers deben saber cuántos punteros hay asociados actualmente con ellos (para distinguir los gestos de 1 dedo frente a 2 dedos, etc.).