gpt4 book ai didi

rust - Rust:特征中的类型引用

转载 作者:行者123 更新时间:2023-12-03 11:49:00 31 4
gpt4 key购买 nike

我想实现自己的通用容器,这是我正在使用的特征的片段:

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类型实现此特征,这也会在以后编写通用代码时引起问题。有什么建议吗?

最佳答案

我认为您无法在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;
}

关于rust - Rust:特征中的类型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61364098/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com