Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. use std::any::Any;
  2.  
  3. trait T {
  4. fn foo(&self) -> &'static str;
  5. fn into_any(self: Box<Self>) -> Box<dyn Any>;
  6. }
  7.  
  8. struct A();
  9.  
  10. impl T for A {
  11. fn foo(&self) -> &'static str {
  12. "a"
  13. }
  14.  
  15. fn into_any(self: Box<Self>) -> Box<dyn Any> {
  16. self
  17. }
  18. }
  19.  
  20. fn main() {
  21. // construct Box<dyn T>
  22. let a: Box<dyn T> = Box::new(A());
  23. println!("{}", a.foo());
  24.  
  25. // convert Box<A> to Box<dyn Any>
  26. let a: Box<A> = Box::new(A());
  27. let a = a as Box<dyn Any>;
  28. println!("{}", a.downcast::<A>().unwrap().foo());
  29.  
  30. // convert Box<dyn T> to Box<dyn Any>
  31. let a: Box<dyn T> = Box::new(A());
  32. let a = a.into_any();
  33. println!("{}", a.downcast::<A>().unwrap().foo());
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement