漠然としたタイトルは申し訳ありませんが、私の問題を簡潔にまとめる方法を正確に知っていません。コンパイラは、パラメータの型が十分に長くは生きられない可能性があるため、静的なライフタイムを追加することを提案していますが、私はそれが私の望むものだとは思わない
私は(は、最小限の例を示す)何かを実装しようとしているが、次のようになります(私の知る限り)への錆のデフォルトは渡しの所有権ので
trait Bar<T> {}
struct Foo<T> {
data: Vec<Box<Bar<T>>>
}
impl<T> Foo<T> {
fn add<U: Bar<T>>(&mut self, x: U) {
self.data.push(Box::new(x));
}
}
、私の精神的なモデルが考えていますこれはうまくいくはずです。 addメソッドはオブジェクトx
の所有権を持ち、フルタイプU
を知っているのでBox
にオブジェクトを移動できます(Bar<T>
の特性だけでなく)。ボックス内に移動すると、ボックス内のアイテムの寿命は、ボックスの実際の寿命に結びつけられます(例えば、pop()
がオブジェクトを破棄する場合)。
しかし、明らかにコンパイラは同意していません。私は'static
ライフタイム修飾子(E0310)を追加することを検討するように頼んでいます。私は99%が私が欲しいものではないと確信していますが、私は何をすべきかを正確には分かりません。
Box<T>
は、本質的に任意の注釈なしstd::unique_ptr<T>
- で、変数がで渡されます値
Copy
と右辺参照もしそうでなければ - 参照アノテーションで、
&
はおおよそconst&
と&mut
略&
であります
- デフォルトの寿命は
ありがとう、それは大いにクリア! –