Reference 在引用上泛化迭代器,在值上泛化迭代器

Reference 在引用上泛化迭代器,在值上泛化迭代器,reference,iterator,rust,pass-by-reference,pass-by-value,Reference,Iterator,Rust,Pass By Reference,Pass By Value,我想实现一个trait,其中一个函数将迭代器作为参数,然后将迭代器返回的值作为不可变引用进行操作 不过,我也希望我的函数也能处理值上的迭代器(无需重复代码)。我该怎么做 以下操作不起作用: impl<T, I: Iterator> FilterItem for SortedFilter<I> where T: Ord, I::Item: Borrow<T> { ... } 您正在寻找以下特征: 在编写泛型代码时,通常需要对从给定类型借用数据的所有方

我想实现一个trait,其中一个函数将迭代器作为参数,然后将迭代器返回的值作为不可变引用进行操作

不过,我也希望我的函数也能处理值上的迭代器(无需重复代码)。我该怎么做

以下操作不起作用:

impl<T, I: Iterator> FilterItem for SortedFilter<I> where  T: Ord, I::Item: Borrow<T> {
    ...
}
您正在寻找以下特征:

在编写泛型代码时,通常需要对从给定类型借用数据的所有方法进行抽象

使用标准::借用::借用;
fn印刷it(国际热核实验堆:I)
其中I:Iterator,
T:借
{
iter中的v{
设a:&u8=v.borrow();
println!(“{}”,a);
}
}
fn main(){
设vals=vec![1,2,3];
print_it(vals.iter());//引用的迭代器
打印它(vals.into_iter());//值的迭代器
}

很抱歉,我应该澄清一下,我实际上是在实现一个特性,而且该项的类型是通用的。请选择另一个look@dspyz我认为这次更新完全改变了这个问题。您可以更新标题以反映更复杂的特定实例,也可以回滚更改并提出后续问题。
error: the type parameter `T` is not constrained by the impl trait, self type, or predicates
use std::borrow::Borrow;

fn print_it<I, T>(iter: I)
    where I: Iterator<Item = T>,
          T: Borrow<u8>
{
    for v in iter {
        let a: &u8 = v.borrow();
        println!("{}", a);
    }
}


fn main() {
    let vals = vec![1,2,3];
    print_it(vals.iter()); // Iterator of references
    print_it(vals.into_iter()); // Iterator of values
}