【问题标题】:Add trait to extend builtin types添加特征以扩展内置类型
【发布时间】:2021-07-11 10:20:06
【问题描述】:

我正在尝试使用自定义函数扩展 Iterator 特征:

pub trait CustomTrait<T> : Iterator<Item=T> where Self: Sized, Self: 'static {
    #[inline]
    fn custom_function(self) -> Result<Box<dyn Iterator>, Err> {
        let boxed = Box::new(self);
        do_something(boxed)
    }
}

它编译正确。但是,当我在迭代器上调用我的新特征时,编译器会抱怨它没有为迭代器实现。 (我试过std::ops::Rangestd::slice::Iter&lt;'_, {integer}&gt;。)

我能够使每个函数调用对单个结构类型起作用,如下所示:

impl CustomTrait<u64> for std::ops::Range<u64> {}

但是,我认为必须有一种方法可以让我的 trait 定义应用于所有 Iterable,而无需为每个实现 Iterable trait 的结构手动实现它。

【问题讨论】:

    标签: rust


    【解决方案1】:

    当你扩展一个特征时,你基本上创建了一个新的特征,它也保证它具有它所扩展的特征定义的所有方法。

    所做的是自动为您要扩展的特征实现任何这些方法。

    除了你已经做的,你实际上需要实现你的特质for迭代器:

    impl<T> CustomTrait<T> for Iterator<Item=T> {
      ...
    }
    

    【讨论】:

    • 不,我没有,谢谢!为了将来参考,在我的情况下,由于我没有显示的一些代码导致在具有动态大小的迭代器周围出现编译错误,我不得不对其进行一些调整:impl&lt;T, V&gt; CustomTrait&lt;V&gt; for T where T : Iterator&lt;Item=V&gt;, T: 'static {}
    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 2016-07-04
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多