簡體   English   中英

如何為包含對具有生命周期參數的類型的引用的類型聲明生命周期參數?

[英]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<'?>
}

我如何表達以下內容:

  1. foo的引用的生命周期應該是包含它的Bar的生命周期
  2. 我不關心底層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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM