🦁

0013-Box

に公開

BoxはHeap上に保存される
実行時に型が決まる値のためにdynと組みあわせて使うのがメイン

use rand::prelude::*;
struct Sheep {
    age: u32,
}

struct Cow {
    age: u32,
}

trait Animal {
    fn get_age(&self) -> u32;
}

impl Animal for Sheep {
    fn get_age(&self) -> u32 {
        self.age
    }
}

impl Animal for Cow {
    fn get_age(&self) -> u32 {
        self.age * 2
    }
}

fn random_animal(r: bool) -> Box<dyn Animal> {
    if r  {
        Box::new(Sheep {
            age: 5,
        })
    } else {
        Box::new(Cow {
            age: 10,
        })
    }
}

fn main()->Result<(), std::io::Error> {
    let mut rng = rand::rng();
    let r = rng.random_bool(1.0 / 3.0);
    let animal = random_animal(r);
    println!("Animal age: {}", animal.get_age());
    Ok(())
}
[package]
name = "box_"
version = "0.1.0"
edition = "2024"

[dependencies]
rand = "0.9"

Discussion