【问题标题】:Vector of indexed containers in generic struct通用结构中索引容器的向量
【发布时间】:2021-07-19 06:39:41
【问题描述】:

我正在尝试使用索引容器的向量,例如任何实现std::ops::Index 的类型,但我找不到在实现部分为type Output 分配类型的解决方案。

据我所知,它应该是这样的:

pub struct Holder<C: Index<usize> + ExactSizeIterator> {  
    containers: Vec<C>
}

impl<C: Index<usize>, T> Index<usize> for Holder<C> {
    type Output = T;

    fn index(&self, index: usize) -> &Self::Output {
        todo!();
    }
}

但这显然以

结尾

类型参数T 不受 impl trait、self 类型或谓词的约束 无约束类型参数 rustc(E0207)

(为了澄清,错误指向impl&lt;C: Index&lt;usize&gt;, T&gt;中的T

但是我不知道如何将另一个泛型类型添加到 Holder 的定义中,这不仅仅是一个未使用的字段。

Holder 的目的是包含其他可索引的容器,Holder 的索引函数应该从其中一个容器中返回一个项目。

如果帖子中缺少任何内容,请告诉我。任何帮助或指点将不胜感激,谢谢!

【问题讨论】:

    标签: generics rust traits


    【解决方案1】:

    您可能希望完全删除 T 并直接从 C 推导出 Output 类型:

    impl<C: Index<usize> + ExactSizeIterator> Index<usize> for Holder<C> {
        type Output = C::Output; // <--------
    
        fn index(&self, index: usize) -> &Self::Output {
            todo!();
        }
    }
    

    【讨论】:

    • 谢谢,我没想到!
    【解决方案2】:

    您可以像这样引用泛型参数定义的关联类型:

        type Output = C::Output;
    

    Playground link

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 2015-09-08
      • 2020-05-03
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多