編譯器建議我添加一個'靜態(tài)生命周期,因為參數(shù)類型可能不夠長,但我不認為這是我想要的我正在嘗試實現(xiàn)看起來像這個最小例子的東西: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));
}}由于Rust默認為(據(jù)我所知)pass-by-ownership,我的心理模型認為這應(yīng)該有效。該add方法獲取對象的所有權(quán),x并且能夠?qū)⒋藢ο笠苿拥絘中,Box因為它知道完整類型U(而不僅僅是特征Bar<T>)。一旦進入a Box,框內(nèi)項目的生命周期應(yīng)該與框的實際生命周期相關(guān)聯(lián)(例如,當pop()從矢量中刪除時,對象將被銷毀)。然而,很明顯,編譯器不同意(并且我確定比我更了解...),要求我考慮添加一個'static生命周期限定符(E0310)。我99%肯定這不是我想要的,但我不確定我應(yīng)該做什么。為了澄清我的想法并幫助識別誤解,我的心理模型來自C ++背景,是:Box<T> 本質(zhì)上是 std::unique_ptr<T>如果沒有任何注釋,則變量按值傳遞,Copy否則傳遞rvalue-reference與參考注釋,&大致const&和&mut大致&默認生命周期是詞法范圍
編譯器建議我添加一個'靜態(tài)生命周期,因為參數(shù)類型可能不夠長,但我不認為這是我想要的
哈士奇WWW
2019-08-23 09:22:11