【发布时间】:2016-04-18 20:54:37
【问题描述】:
我有一个这样的循环缓冲区:
struct CircularBuffer<T: Copy> {
seqno: usize,
data: Vec<T>,
}
我想创建一个作为迭代器的外部结构。该结构将引用CircularBuffer 的内部数据向量,如下所示:
struct CircularBufferIterator<'a, T: 'a + Copy> {
buffer: &'a CircularBuffer<T>,
position: usize,
limit: usize,
}
这是我能想到的最好的实际编译。您能否建议一种更好的方式来表达CircularBufferIterator 依赖于CircularBuffer 对象?
困扰我的是T: 'a + Copy。我想知道是否有可能或者说不是T 类型,但CircularBuffer<T> 是CircularBufferIterator 依赖的类型是否有意义。
我没有看到的部分是为什么我需要将'a 生命周期添加到T。那不能是T: Copy,没有一生吗?换句话说,我看不到T 引用比CircularBuffer 寿命更长的情况。是 CircularBuffer 引用比 CircularBufferIterator 寿命更长。
CircularBuffer 和上下文来自this blog post。
【问题讨论】:
-
我不清楚所提出的解决方案有什么问题。
T必须比'a寿命更长,以防止悬空指针;T必须是Copy,因为您已经定义了CircularBuffer。 -
感谢您的格式化帮助。我不确定是否有问题。我只是不完全理解它是如何工作的。我没有看到的部分是为什么我需要为 T 添加一个生命周期。那不能是 T:复制,没有生命周期吗?换句话说,我看不到 T 引用超过 CircularBuffer 的情况。它是 CircularBuffer 引用比 CBIterator 寿命更长。所以我一直在寻找一种更好的方式来表达这一点。
标签: rust