gpt4 book ai didi

rust - 来自特征和 T 生命周期的 Vec 引用

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

我想和几个人一起工作 Vec立刻。这些向量可以专门用于不同的类型。我创建了一个特征:

trait Column {
//fn insert
//fn remove
}

impl<T> Column for Vec<T> // ...

我可以转换 Vec<T1>Vec<T2>Box<Column> , 但我还需要转换 Box<Column>返回Vec .正如 How to get a struct reference from a boxed trait? 中的建议,我写道:

use std::any::Any;

trait Column {
fn as_any(&self) -> &Any;
}

impl<T> Column for Vec<T>
where T: Default
{
fn as_any(&self) -> &Any {
self //ERROR!
}
}

但是这段代码会产生一个错误:

error[E0310]: the parameter type `T` may not live long enough
--> src/main.rs:11:9
|
11 | self //ERROR!
| ^^^^
|
= help: consider adding an explicit lifetime bound `T: 'static`...
note: ...so that the type `std::vec::Vec<T>` will meet its required lifetime bounds
--> src/main.rs:11:9
|
11 | self //ERROR!
| ^^^^

我该如何解决这个问题?

最佳答案

最简单的方法是给T加上'static约束,即

impl<T> Column for Vec<T>
where T: Default + 'static
{
fn as_any(&self) -> &Any {
self
}
}

这意味着如果 T 有任何生命周期参数,它们必须是 'static。如果您还想让它适用于具有生命周期参数的类型,那就有点复杂了。 (我不确定那会如何工作。)

顺便说一句,Rust 编译器有时会提供这样的建议,因此阅读错误消息非常有用。您还可以运行 rustc --explain E0310(或任何错误代码),也许解释足以找出解决方案。

关于rust - 来自特征和 T 生命周期的 Vec<T> 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44307780/

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