我想实施一个VecDeque
有最大尺寸限制。我有两个策略,但我都无法完成。
第一种方法:通过组合继承。
我创建了一个新结构:
pub struct LimVecDeque<T> {
deque: VecDeque<T>,
limit: usize,
}
并创建一个新的推送函数:
impl<T> LimVecDeque<T> {
...
pub fn push (&self, elem: T) {
self.deque.push_back(elem);
if self.limit < self.deque.len() {
self.deque.pop_front();
}
}
...
}
这是可行的,但是随着我的程序的成长,我需要向我的程序添加功能LimVecDeque
结构。大部分都是原作的复制品VecDeque
:
pub fn len(&self) -> usize {
self.deque.len()
}
我还有更多问题需要导出VecDeque::iter()
。我在类型和迭代器方面遇到了问题(我还不太擅长迭代器)。
这种方法迫使我克隆/导出每个函数VecDeque
into LimVecDeque
。大量的工作!
第二种方法:创建一个新特征并实施VecDeque
:
trait Limited {
type Elem;
pub fn push_bounded(&self, limit: usize, elem: Elem);
}
然后再实现该特征VecDeque
.
但我必须通过limit
每次插入的值。怎样才能一次超过极限值呢?
一般来说,从 std 向结构添加功能(不丢失/隐藏当前功能)的简单方法是什么?