我寫了一個特點,指定類似於那些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