Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait MyTrait {
- fn render(&self);
- fn change(&mut self, pos: f32);
- }
- struct Object {
- pos: f32
- }
- impl Object {
- pub fn new() -> Object {
- Object{ pos: 0. }
- }
- }
- impl MyTrait for Object {
- fn render(&self) {
- println!("Func render from trait... ({})", self.pos);
- }
- fn change(&mut self, pos: f32) {
- self.pos = pos;
- }
- }
- struct Scene<T: MyTrait> {
- list: Vec<Box<T>>
- }
- impl<T: MyTrait> Scene<T> {
- pub fn new() -> Scene<T> {
- Scene{ list: vec![] }
- }
- pub fn add(&mut self, object: T) {
- let obj = Box::new(object);
- self.list.push(obj);
- }
- pub fn render_all(&self) {
- for obj in &self.list {
- obj.render();
- }
- }
- pub fn get_mut(&mut self) -> &mut Box<T> {
- unsafe { self.list.get_unchecked_mut(0) }
- }
- }
- fn main() {
- let mut scene = Scene::new();
- let object = Object::new();
- scene.add(object);
- scene.render_all();
- scene.get_mut().change(42.);
- scene.render_all();
- println!("End...");
- }
Add Comment
Please, Sign In to add comment