I'm implementing the trait Vector
. This trait has several methods including iter
which returns an iterator.
pub trait Vector<T, I: Iterator<Item = T>> {
// several functions
fn iter(&self) -> I;
}
VectorImplementation1
implements Vector
:
pub struct VectorImplementation1<T, I: Iterator> {
numbers: Vec<T>,
phantom: std::marker::PhantomData<I>, //otherwise error because I not used
}
impl<T, I: Iterator<Item = T>> VectorImplementation1<T, I> {
// constructor
}
impl<T, I: Iterator<Item = T>> Vector<T, I> for VectorImplementation1<T, I> {
// several functions
fn iter(&self) -> I {
self.numbers.iter()
}
}
The compiler returns an error:
error[E0308]: mismatched types
--> src/lib.rs:18:9
|
17 | fn iter(&self) -> I {
| - expected `I` because of return type
18 | self.numbers.iter()
| ^^^^^^^^^^^^^^^^^^^ expected type parameter, found struct `std::slice::Iter`
|
= note: expected type `I`
found type `std::slice::Iter<'_, T>`
Apparently std::slice::Iter
(the type returned by iter
) doesn't implement Iterator
.
What trait can I use if I can't use Iterator
? Must I do something different?