我有一个Idx
struct ,它在逻辑上是对其他数据 struct 的引用,其中其他数据 struct 的存留时间比Idx
长.我希望Idx
go 引用外部数据 struct 中包含一些东西,但这是不可能的,因为我需要用类型实现deref
struct Idx<'a>(&'a Foo, usize);
impl<'a> Deref for Idx<'a> {
fn deref<'b: 'a>(&'b self) -> &'a Self::Target { todo!() }
}
这与stdlib中的定义不匹配(而deref是一种语言项(?),所以我自己不能编写更通用的版本)
use std::ops::Deref;
struct Foo {
xs: Vec<u8>,
}
struct Idx<'a>(&'a Foo, usize);
impl<'a> Deref for Idx<'a> {
type Target = u8;
fn deref(&self) -> &u8 {
&self.0.xs[self.1]
}
}
fn main() {
let foo = Foo {
xs: vec!(10, 11, 12),
};
let mut xs_refs: Vec<&u8> = vec!();
for i in 0..3 {
let idx = Idx(&foo, i);
xs_refs.push(&*idx);
}
}