Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Trait defines the overloaded method
- trait OverloadedFn<T, U, O> {
- fn overloaded_fn(&self, tee: T, yu: U) -> O;
- }
- // Struct to use with the overload
- struct Adder;
- impl Adder {
- // Convenience helper to hide the trait boilerplate from the user
- fn add<T, U, O>(&self, tee: T, yu: U) -> O
- where Self: OverloadedFn<T, U, O> {
- self.overloaded_fn(tee, yu)
- }
- }
- impl OverloadedFn<i32, i32, i32> for Adder {
- fn overloaded_fn(&self, tee: i32, yu: i32) -> i32 {
- tee + yu
- }
- }
- impl OverloadedFn<i32, f32, f32> for Adder {
- fn overloaded_fn(&self, tee: i32, yu: f32) -> f32 {
- tee as f32 + yu
- }
- }
- fn main() {
- let a = Adder.add(42, 3);
- let b = Adder.add(42, 3.14);
- println!("a: {}", a);
- println!("b: {}", b);
- }
Add Comment
Please, Sign In to add comment