我們有一個LinkedList
一個結構:Rust列表元素(列表所有者和多個引用者)的多個所有者 - 可能嗎?
struct XPipeline {
handlers: LinkedList<XHandler>,
}
XPipeline
是所有XHandler
對象的所有者,並可以訪問和修改它們。
我們已經有處理程序列表;現在我們需要每個處理程序都可以引用列表中的鄰居。也就是說,每個處理程序的方法可以引用處理程序的鄰居,修改它們並調用它們的方法。
我的第一個想法是這樣的:我提供每個處理程序與prev
和next
字段,將引用鄰居。通過在列表中添加新的處理程序,我用相應的引用初始化這些字段。現在我可以在所有處理程序的方法中使用這些引用。 (這在使用指針的C++中很容易實現)。
問題是:只允許一個所有者(即具有修改權限)。並且該所有者(所有處理者)已經是XPipeline
對象。我怎麼解決它?也許,通過採用:
handlers: Rc<RefCell<LinkedList<XHandler>>>
但究竟如何?
在問這個問題之前,請[編輯]你的問題到[顯示你進行的研究](http://meta.stackoverflow.com/q/261592/155423)。當你問這個問題時,[tag:rust]問題的首頁有[另一個圓形鏈表問題](http://stackoverflow.com/q/38353845/155423);這有什麼不同?那麼[50左右的其他鐵鏽鏈表問題](http://stackoverflow.com/search?q=%5Brust%5D+linked+list+is%3Aq);也許其中一些會有用?一旦我們知道了所有現有答案的混淆,我們可以爲您的獨特問題提供有用的答案。 – Shepmaster
我已通過提供的鏈接進行搜索,未找到答案。所有的問題都是關於其他主題的。例如,[另一個循環鏈表問題](http://stackoverflow.com/questions/38353845/unable-to-create-a-circular-linked-list-in-safe-rust-unsafe-version-crashes)是關於用一種迭代器實現一個列表的。我問的是:我有一個標準的通用LinkedList +每個元素都可以直接引用它的鄰居(所以它是一種雙向雙向列表)。 –
這聽起來像你正在尋找一個* intrusive數據結構*。 – llogiq