Я не думаю, что вы можете определить type
в trait
, поскольку разработчики могли бы настроить этот тип.
Но вы могли бы ввести псевдоним типа вне черты:
pub type IntoIterItem<T> = <T as IntoIterator>::Item;
pub trait MyVec :
Default
+ Clone
+ IntoIterator
+ std::iter::FromIterator<IntoIterItem<Self>>
{
fn get(self: &Self, index: usize) -> IntoIterItem<Self>;
}
Или, как хак, вы можете попробовать MyVec<I>
, но по умолчанию I
:
pub trait MyVec<Item=<Self as IntoIterator>::Item> :
Default
+ Clone
+ IntoIterator
+ std::iter::FromIterator<Item>
{
fn get(self: &Self, index: usize) -> Item;
}