以下内容很好:

pub struct Reader<'a> {
    position: uint,
    data: &'a [u8]
}

它是一个以u8型向量(实际上是一个切片)为参考的读取器,我指定了它的生存期.

然而,这并不是我想要的.我想让 struct 成为泛型的,更准确地说,我想指出类型应该是任何东西的一部分.我一开始就试过:

pub struct Reader<'a, T> {
    position: uint,
    data: &'a T
}

它并不表示T是一个片,但这已经失败了,因为有一条消息:

参数类型T可能生命周期 不够长;考虑添加一个

好的,我只需要指定生命周期.

但现在我的问题是,如何使它成为类型slice的泛型,并具有生命周期?我试过像Reader<'a, T: 'a Vec>T: 'a [T]这样的东西,但我不知道我应该如何表示这一点,官方指南似乎没有处理这样的情况.

我只想构造一个读取器,通过borrow 任何类型的切片来接收它,并提供对数据进行操作的方法(以只读方式).

推荐答案

在try 了更多之后,我终于找到了答案:

pub struct Reader<'a, T: 'a> {
    position: uint,
    data: &'a [T]
}

这将读卡器data定义为Slice<T>类型([]表示切片),&'a指定borrow 数据的生存期.

现在我可以实现这样的东西:

impl<'a, T> Reader<'a, T> {
    pub fn from_data(bytes: &'a[T]) -> Reader<'a, T> {
        Reader {
            position: 0,
            data: bytes
        }
    }
}

Rust相关问答推荐

阻止websocket中断的中断中断的终端(操作系统错误4)

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

为什么BitVec缺少Serialize trait?

如何使用 list 在Rust for Windows中编译?

在铁 rust 中传递所有权

在Rust中是否可以使用Rc自动化约束传播

Tokio_Postgres行上未显示退回特性的生存期,且生命周期 不够长

是否可以使用Rust宏来构建元组的项?

为什么这个变量不需要是可变的?

程序在频道RX上挂起

当推送到 HashMap 中的 Vector 时,类型 `()` 无法取消引用

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

Rust编译器通过哪些规则来确保锁被释放?

枚举的利基优化如何在 Rust 中工作?

如果不满足条件,如何在 Rust 中引发错误

为什么拥有 i32 所有权的函数需要它是可变的?

使用 HashMap 条目时如何避免字符串键的短暂克隆?

当我在 struct 中存储异步函数时,为什么它需要生命周期

为什么当borrow 变量发生变化时,borrow 变量不会改变?