![](/img/trans.png)
[英]How do I bound a generic type with a trait that requires a lifetime parameter if I create the reference inside the function?
[英]How do I declare the lifetime parameters for a type which contains a reference to a type with a lifetime parameter?
試圖弄清楚如何描述這種一生的關系。
因此,假設我有一個具有生命周期參數的組件:
struct Foo<'a> { ... }
假設我想要另一個包含對Foo
的引用的組件
struct Bar<??> {
foo: &'? Foo<'?>
}
我如何表達以下內容:
foo
的引用的生命周期應該是包含它的Bar
的生命周期Foo
的生命周期,只要它比包含引用的Bar
的生命周期長編輯:所以如果Foo
本身沒有生命周期參數,我會像這樣實現Bar
:
struct Bar<'a> {
foo: &'a Foo
}
但我不知道如何處理Foo
上的參數。
我不關心底層 Foo 的生命周期,只要它比包含引用的 Bar 的生命周期長
首先,生命周期可以讀作“這個元素至少存在 'x”,所以當你聲明struct Foo<'a> {... }
意味着 Foo 的 X 實例至少存在 'a,其中 'a 是變量與任何其他變量一樣,但它是一個生命周期變量。
現在,
我如何表達以下內容:
對 foo 的引用的生命周期應該是包含它的 Bar 的生命周期
要表達這一點,您需要為Bar
聲明生命周期變量並將其傳遞給Foo
像這樣
struct Bar<'a> {
foo: &'a Foo<'a>
}
或者
struct Bar<'a> {
foo: Foo<'a>
}
一個和另一個之間的區別是語義上的,這意味着一個包含Foo<'a>
類型的元素,另一個包含對Foo<'a>
類型元素的引用。
現在,
我不關心底層 Foo 的生命周期,只要它比包含引用的 Bar 的生命周期長
將生命周期“向下”傳遞必然意味着子元素的壽命至少與其父元素一樣長,但不一定意味着它的壽命更長。 為了表達無論父母的生命周期如何,孩子都生活在主要的 scope 中,您需要使用“靜態”生命周期。 像這樣
struct Bar {
foo: &'static Foo<'static>
}
或者
struct Bar {
foo: Foo<'static>
}
你也可以做一些這樣的
struct Bar<'a> {
foo: &'a Foo<'static>
}
這意味着對元素的引用與父元素一樣長,但元素本身具有更寬的 scope
不知道能不能回答你的問題,希望對你有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.