[英]Passing lifetime to a struct
我有這樣的代碼:
pub trait Action {
fn execute(&self);
}
struct AddAction<'a> {
rpn_calculator: &'a RpnCalculator
}
struct DeductAction<'a> {
rpn_calculator: &'a RpnCalculator
}
impl Action for DeductAction<'_> {
fn execute(&self) {
// ...
}
}
impl Action for AddAction<'_> {
fn execute(&self) {
// ...
}
}
impl<'a> RpnCalculator {
fn actions(&self) -> Vec<Box<dyn Action + 'a>> {
let mut actions: Vec<Box<dyn Action + 'a>> = vec![
Box::new(AddAction { rpn_calculator: &self })
Box::new(AddAction { rpn_calculator: &self })
// ...
];
// ...
actions
}
}
我的代碼的意圖是 RpnCalculator.actions() 應該創建一些實現 trait Action 的結構的一些實例,並返回一個包含這些實例的向量。 這些結構有一個屬性 rpn_calculator,它是對 RpnCalculator 的引用。 RpnCalculator.actions() 應該將 self(創建它的 RpnCalculator)放入這個引用中。
現在我得到的錯誤是“無法推斷適當的生命周期”。 我在創建添加到向量的實例的行中收到此錯誤:
Box::new(AddAction { rpn_calculator: &self })
出於這個原因,我在向量聲明中有'a
,但它仍然不起作用。
您可能應該使用fn actions(&'a self)
因為您在dyn Action + 'a
使用的生命周期'a
與RpnCalculator
的生命周期有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.