[记]Rust闭包加动态分发

发布时间 2023-07-04 13:39:39作者: 戳人痛处
pub trait App {
    fn run(&mut self);
}
#[derive(Clone, Copy)]
pub struct Cda{
    d:i32,
}
impl Cda {
    fn new(num:i32)->Self{
        Self { d: num }
    }
    fn inc(&mut self)->Self{
        self.d+=1;
        *self
    }
    fn show(&self){
        println!("run:{}",self.d);
    }
}
impl App for Cda {
    fn run(&mut self) {
        self.inc().show();
    }
}
pub type AppCreator = Box<dyn FnMut(i32) -> Box<dyn App>>;
fn runapp(cc:&mut AppCreator){
    cc(22).run();
}
fn main(){
    let mut cc:AppCreator =Box::new(|cc|Box::new(Cda::new(cc)));
    runapp(&mut cc);
    runapp(&mut cc);
}