'Lifetimes for traits

Let there is some struct:

struct ResourceData { }

We can create its list:

pub struct ResourceList
{
    pub v: Vec<ResourceData>,
}

but if I add a level of indirection:

pub trait Resource<'a> {
    fn data(&self) -> &'a ResourceData;
    fn data_mut(&mut self) -> &'a mut ResourceData;
}

then I am messed:

pub struct ResourceList2<R: Resource<'a>> // What should be 'a?
{
    pub v: Vec<R>,
}

What should be 'a?

'a could be the lifetime of the vector, but if an element is removed, the lifetime of the references shorten, because references break. So, accordingly my understanding, 'a isn't the lifetime of the vector.



Solution 1:[1]

Resource should not have a lifetime argument, but instead just use elided lifetimes:

pub trait Resource {
    fn position(&self) -> &ResourceData;
    fn position_mut(&mut self) -> &mut ResourceData;
}

After understanding this, the question disappears, just:

pub struct ResourceList2<R: Resource> // What should be 'a?
{
    pub v: Vec<R>,
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 porton