[英]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.