繁体   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