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<f32, f32, f32> for Adder {
- fn overloaded_fn(&self, tee: f32, yu: f32) -> f32 {
- println!("<f32>");
- tee + yu
- }
- }
- impl OverloadedFn<f64, f64, f64> for Adder {
- fn overloaded_fn(&self, tee: f64, yu: f64) -> f64 {
- println!("<f64>");
- tee + yu
- }
- }
- use std::f32;
- fn main() {
- let a = Adder.add(f32::MAX, 1.0);
- println!("a: {}", a);
- }
Add Comment
Please, Sign In to add comment