局部变量引用的特质范围

时间:2019-03-12 18:42:24

标签: rust traits lifetime

我有一个操作的零复制实现:

impl<'a, 'b> Add<&'b Key> for &'a Key {
    type Output = Key;

    fn add(self, rhs: &'b Key) -> Key {
        // ... calculate sum from given references ...
        Key::new(sum)
    }
}

我有几个具有相似属性的结构,它们都以两个引用作为输入来实现Add,并返回一个新值,即&'a T: Add<&'b T, Output = T>

我想编写一个通用函数,可以利用这些实现中的任何一种,但似乎没有什么可以满足借阅检查器的要求:

pub struct FixedSet<T> {
    items: Vec<Option<T>>,
}

impl<T: Clone + PartialEq> FixedSet<T> {
...
    pub fn sum<'a>(&self) -> Option<T>
        where
            T: 'a,
            &'a T: Add<&'a T, Output=T>,
    {
        if self.items.len() == 0 {
            return None
        }
        let mut iter = self.items.iter(); //** Error **
        let mut sum = iter.next().unwrap().as_ref().unwrap().clone();
        for v in iter {
            let t = v.as_ref().unwrap();
            sum = &sum + t; // *A*
        }
        Some(sum)
    }

错误是:error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in function call due to conflicting requirements

我想 告诉编译器,“嘿,当调用add时有两个对T的引用时,请放心,这些引用只需要存在即可直到从add返回 A ”;但我似乎无法正确处理。

0 个答案:

没有答案