Box; } fn t-6ren">
gpt4 book ai didi

rust - 这个 "static"的生命周期是从哪里来的?

转载 作者:行者123 更新时间:2023-11-29 08:35:55 29 4
gpt4 key购买 nike

The following program不编译:

use std::any::Any;

trait Foo<'a> {
fn to_box_any(self: Box<Self>) -> Box<Any + 'a>;
}

fn test<'a>(v: Box<dyn Foo<'a> + 'a>) {
v.to_box_any();
}

fn main() {}

错误信息:

error[E0478]: lifetime bound not satisfied
--> src/main.rs:8:7
|
8 | v.to_box_any();
| ^^^^^^^^^^
|
note: lifetime parameter instantiated with the lifetime 'a as defined on the function body at 7:1
--> src/main.rs:7:1
|
7 | fn test<'a>(v: Box<dyn Foo<'a> + 'a>) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: but lifetime parameter must outlive the static lifetime

我以为我标记了尽可能多的显式生命周期,但我不知道 static 生命周期要求从何而来。

如果我用自定义特征更改 Any,它会起作用,所以看起来 Any 正在创建需求?

最佳答案

我强烈建议阅读您尝试使用的代码的文档。例如,Any 的文档说(强调我的)

A type to emulate dynamic typing.

Most types implement Any. However, any type which contains a non-'static reference does not. See the module-level documentation for more details.

特征本身需要一个'static 绑定(bind):

pub trait Any: 'static {
fn get_type_id(&self) -> TypeId;
}

你还可以看到所有的方法实现都需要'static:

impl Any + 'static {}
impl Any + 'static + Send {}
impl Any + 'static + Sync + Send {}

关于rust - 这个 "static"的生命周期是从哪里来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51664422/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com