我々はLinkedList
を持つ構造体を持っている:錆リスト要素(リスト所有者と複数の参照者)の複数の所有者 - 可能ですか?
struct XPipeline {
handlers: LinkedList<XHandler>,
}
XPipeline
はすべてXHandler
オブジェクトの所有者であるし、それらにアクセスして変更することができます。
既にハンドラのリストがあります。各ハンドラがリスト内の隣人を参照できるようにする必要があります。すなわち、各ハンドラのメソッドは、ハンドラのネイバを参照し、それらを変更し、それらのメソッドを呼び出すことができます。
私の最初の考えは次のようなものでした:私はprev
とnext
の隣人を参照するフィールドを各ハンドラに提供します。新しいハンドラをリストに追加することによって、これらのフィールドを対応する参照で初期化します。これらの参照は、すべてのハンドラのメソッド内で使用できます。 (それはポインタでC++で簡単になるでしょう)。
問題は次のとおりです。所有者は1人だけです(変更許可あり)。その所有者(すべてのハンドラの)はすでに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 +各要素がその隣人を直接参照することができるということです(つまり、これは二重双方向リストの一種です)。 –
あなたは*侵入型のデータ構造*を探しているようです。 – llogiq