[英]How to inject a stub for a trait object into a type in Rust and keep a reference to it?
[英]Rust: type reference within trait
我想實現自己的通用容器,這是我正在使用的特征的片段:
pub trait MyVec
where
Self: Default + Clone + IntoIterator,
Self: std::iter::FromIterator<<Self as IntoIterator>::Item>,
{
fn get(self: &Self, index: usize) -> <Self as IntoIterator>::Item;
// many other methods are omitted.
}
是否可以引入一個新的計算類型變量,這樣我就可以避免在任何地方輸入<Self as IntoIterator>::Item
? 一個簡單的type Item = <Self as IntoIterator>::Item
不起作用,因為這是一個可能被覆蓋的關聯類型。 使用類型參數作為MyVec<I>
也不起作用,因為我不想用不同的I
類型為同一個結構實現這個特性,並且在以后編寫通用代碼時也會導致問題。 有什么建議嗎?
我不認為你可以在trait
中定義一個type
作為實現者然后可以自定義這個類型。
但是你可以在特征之外引入一個類型別名:
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>;
}
或者,作為 hack,您可以嘗試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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.