【发布时间】:2020-09-26 11:18:22
【问题描述】:
我想实现一个具有最大大小限制的 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 中的每个函数克隆/导出到 LimVecDeque。很多工作!
第二种方法:为 VecDeque 创建一个新的 trait 并实现:
trait Limited {
type Elem;
pub fn push_bounded(&self, limit: usize, elem: Elem);
}
然后用 VecDeque 实现 trait。
但我必须在每次插入时传递 limit 值。一次怎么能通过极限值?
一般来说,从 std 向结构添加功能的简单方法是什么(不丢失/隐藏当前功能)?
【问题讨论】:
标签: collections rust extends