簡體   English   中英

將生命周期傳遞給結構

[英]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使用的生命周期'aRpnCalculator的生命周期有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM