当实现"From"特性时,对象的生存时间不够长



我的代码有一个'。。。当我为FileSlice实现From<T>特征时,由于FlieSlice引用了from方法的参数,并且该参数在方法返回时被丢弃,因此出现"生存时间不够长"错误。

有办法解决这个问题吗?非常感谢。

struct FileSlice {
data: Box<dyn FileHandle>,
}
trait FileHandle {
fn read(&self, range: Range<usize>);
}
impl FileHandle for &'static [u8] {
fn read(&self, range: Range<usize>) {
let a = &self[range];
println!("{:?}", a);
}
}
impl<T> From<T> for FileSlice
where
T: Deref<Target = [u8]> + 'static,
{
fn from(a: T) -> Self {
let b: &'static [u8] = a.deref(); //error: 'a' does not live long enough.
FileSlice { data: Box::new(b) }
}
}

Deref::deref()具有签名:

fn deref(&self) -> &Self::Target

或者,减额:

fn deref<'a>(&'a self) -> &'a Self::Target

借用self,并返回一个具有相同生存期的引用。因此,如果希望生成的引用为'static,则需要&self&'static selfT: 'static不相关:意味着self是静态的,但&self是参数a的地址,显然不是'static。您需要的是:

impl<T> From<&'static T> for FileSlice
where
T: Deref<Target = [u8]>,
{
fn from(a: &'static T) -> Self {
let b: &'static [u8] = a.deref();
FileSlice { data: Box::new(b) }
}
}

最新更新