Допустим, у меня есть два типа объектов, A и B. Отношения между ними многие-ко-многим, но ни один из них не является владельцем другого.
И экземпляры A и B должны знать о соединении; это не только один путь.
Итак, мы можем сделать это:
class A
{
...
private: std::vector<B *> Bs;
}
class B
{
private: std::vector<A *> As;
}
У меня вопрос: куда мне поместить функции для создания и уничтожения соединений?
Должно ли это быть A :: Attach (B), которое затем обновляет векторы A :: Bs и B :: As?
Или это должно быть B :: Attach (A), что кажется одинаково разумным.
Ни один из тех, кто чувствует себя хорошо. Если я перестану работать с кодом и вернусь через неделю, я уверен, что не смогу вспомнить, нужно ли мне делать A.Attach (B) или B.Attach (A).
Возможно, это должна быть такая функция:
CreateConnection(A, B);
Но создание глобальной функции также нежелательно, учитывая, что эта функция предназначена специально для работы только с классами A и B.
Другой вопрос: если я часто сталкиваюсь с этой проблемой / требованием, могу ли я как-то найти общее решение? Возможно, класс TwoWayConnection, который я могу извлечь или использовать в классах, которые разделяют этот тип отношений?
Каковы некоторые хорошие способы справиться с этой ситуацией ... Я знаю, как справиться с ситуацией «один-ко-многим» владеет D), но этот хитрее.
Изменить: просто чтобы сделать его более явным, этот вопрос не включает в себя вопросы собственности. И A, и B принадлежат некоторому другому объекту Z, а Z решает все вопросы, связанные с владением. Меня интересует только то, как создать / удалить связи «многие ко многим» между А и В.
Pointer
и есть GestureRecognizer
. Указатели принадлежат и управляются классом InputManager. GestureRecognizer принадлежат экземплярам Widget, которые в свою очередь принадлежат экземпляру Screen, который принадлежит экземпляру приложения. Указатели присваиваются GestureRecognizer, чтобы они могли передавать им необработанные входные данные, но GestureRecognizers должны знать, сколько указателей в настоящее время связано с ними (чтобы различать жесты 1 палец против 2 пальцев и т. Д.).