我想定义一个特征Container
,这样这个特征的每个实现者也需要实现IntoIterator
,但需要注意的是迭代总是只能借用实例。如果我理解正确,我可以使用这样的模式实现IntoIterator
:
impl<'a> IntoIterator for &'a ContainerImpl
但是,如果类型实现Container
,我该如何指定这需要实现,例如:
trait Container: &IntoIter ???
答案 0 :(得分:6)
您也可以为特征添加where
子句(playground):
trait IterBorrow where for<'a> &'a Self: IntoIterator {}
impl IterBorrow for [i32] {} // legal
// impl IterBorrow for i32 {} // Illegal
但是,您似乎需要在实际想要迭代时重复此绑定,即,如果没有where子句,此函数不会编译:
fn foo<T: IterBorrow>(x: T) where for<'a> &'a T: IntoIterator {
for _ in &x {}
for _ in &x {}
}