我需要在包含对满足特征的元素的引用的向量中找到由引用给出的元素的索引.
有一个层系统,它包括层特性和层堆栈(以控制操作):
pub trait Layer {
fn new(name: &str) -> Self where Self: Sized;
fn on_attach(&mut self);
fn on_detach(&mut self);
fn on_update(&mut self);
fn on_event(&mut self, event: &mut dyn Event);
fn get_debug_name(&self) -> &String;
}
impl PartialEq for dyn Layer {
fn eq(&self, other: &dyn Layer) -> bool {
self.get_debug_name() == other.get_debug_name()
}
}
pub struct LayerStack<'a> {
layers: Vec<&'a mut dyn Layer>,
overlay_position: usize,
}
impl<'a> LayerStack<'a> {
pub fn new() -> Self {
Self {
layers: Vec::new(),
overlay_position: 0
}
}
// ...
pub fn find_index(&self, element: &'a dyn Layer) -> Option<usize> {
self.layers.iter().position(|item| *item == element)
}
}
find_index
方法中有一个错误:
error: lifetime may not live long enough
8 | impl<'a> LayerStack<'a> {
| -- lifetime `'a` defined here
...
48 | self.layers.iter().position(|item| *item == element)
| ^^^^^^^^^^^^^^^^ requires that `'a` must outlive `'static`
这是一个终生的问题,但我看不出有任何问题.我能做些什么呢?
我知道拥有元素本身而不是引用在一定程度上解决了这个问题,但我只需要拥有对层的可变引用,而不是拥有它们. struct 泛型中的静态生存期也不起作用:层没有静态生存期.
我对铁 rust 完全是个新手,所以处理一辈子的事情简直就是一场噩梦