我写了一个特点,指定类似于那些Vec
一些方法:如何自动实现FromIterator?
pub trait Buffer {
type Item;
fn with_capacity(c: usize) -> Self;
fn push(&mut self, item: Self::Item);
}
我想实现FromIterator
为实现Buffer
所有类型,如下所示:
impl<T> iter::FromIterator<T::Item> for T
where T: Buffer
{
fn from_iter<I>(iter: I) -> Self
where I: IntoIterator<Item = T>
{
let mut iter = iter.into_iter();
let (lower, _) = iter.size_hint();
let ans = Self::with_capacity(lower);
while let Some(x) = iter.next() {
ans.push(x);
}
ans
}
}
编译器韩元不让我:
error[E0210]: type parameter `T` must be used as the type parameter
for some local type (e.g. `MyStruct<T>`); only traits defined in the
current crate can be implemented for a type parameter
我想我理解错误信息;它会阻止我编写与标准库可能的未来更改不兼容的代码。
解决此错误的唯一方法似乎是针对实施Buffer
的每种类型单独实施FromIterator
。这将涉及多次复制完全相同的代码。有没有一种方法可以在所有Buffer
类型之间共享相同的实现?
*将来可能会更改为标准库* - 不仅仅是标准库,还有您的代码将来可能链接(或链接到)的任何库。 – Shepmaster