У нас есть структура с LinkedList
:
struct XPipeline {
handlers: LinkedList<XHandler>,
}
XPipeline
является владельцем всех XHandler
объектов и может обращаться к ним и изменять их.
У нас уже есть список обработчиков; теперь нам нужно, чтобы каждый обработчик мог ссылаться на своих соседей в списке. А именно, каждый метод обработчика может обращаться к соседям обработчика, изменять их и вызывать их методы.
Мои первые мысли были такими: я предоставляю каждому обработчику поля prev
и next
, которые будут относиться к соседям. Добавляя новый обработчик в список, я инициализирую эти поля соответствующими ссылками. Теперь я могу использовать эти ссылки во всех методах обработчика. (Это было бы легко в C ++ с указателями).
Проблема в том, что разрешен только один владелец (т.е. с разрешением на изменение). И этот владелец (всех обработчиков) уже является объектом XPipeline
. Как я мог это решить? Возможно, наняв:
handlers: Rc<RefCell<LinkedList<XHandler>>>
Но как именно?