Trait objects
Typically, when we call a function in Rust, we will have a line in the code similar to this:
call_some_method(some_value);
When we have a struct
in the code which has an impl
attached to it, we will have this:
let m = MyStruct {a: 3, b: 4, c: 1, d: 4}; m.call_some_method();
These are both fine.
If you recall, back in the generic_trait_full
example, we had Calc
defined and T
could be either an f32
or i32
. We also talked about how the application knew what to include in the final binary. This is known as static dispatch (which Rust prefers).
Rust uses a system called a dispatch, of which there are two types: static (favored by Rust) and dynamic. Dynamic dispatch relies on something called a trait object.
Let's create a sample test setup
The test code is very simple. We have a trait with a function that returns a String
. We then have a couple of implementations and a parameter bound function that will display the result from the implementations:
trait StaticObject { fn static_method...