Traits and generics
If we look at the code, we have two structures that effectively do the same thing, with the only difference being the types for the parameters aren't the same. We can alter the member names for the structures without an issue to make life simpler:
struct Perimeter { side_one: i32, side_two: i32, } struct Oval { radius: f32, height: f32, }
This would become the following:
struct Shape<T> { line_one: T, line_two: T, }
The calculation cannot be altered as they are totally different, but will need the parameter names to be altered. The other aspect to alter will be the name for the functions. Let's create a version of the code that only uses part of the code.
As we have the generic version of the struct
, we next need to create the trait:
trait Calculate<T> { fn calc(&self) -> T; }
We have to use <T>
as the trait
has to take a generic.
The construction for the implementation can be achieved in one of two ways.
Note
The code for this section can be found in...