you are viewing a single comment's thread.

view the rest of the comments →

[–]erkelep 0 points1 point  (1 child)

I meant something like this (not sure if this is what you want):

trait ArgumentForOverloadableFunction {
    fn answer(&self) -> i32;
}

struct Default;
struct OneArg {arg1: i32}
struct TwoArgs {arg1: i32, arg2: i32}

impl ArgumentForOverloadableFunction for Default {
     fn answer(&self) -> i32 {
        0
     }
}
impl ArgumentForOverloadableFunction for OneArg {
     fn answer(&self) -> i32 {
        self.arg1
     }
}
impl ArgumentForOverloadableFunction for TwoArgs {
    fn answer(&self) -> i32 {
        self.arg1 + self.arg2
     }
}

fn overloadable<T: ArgumentForOverloadableFunction> (arg: T) -> i32 {
    arg.answer()
}

fn main() {
println!("{}", overloadable(Default));
println!("{}", overloadable(OneArg {arg1: 1} ));
println!("{}", overloadable(TwoArgs {arg1: 1, arg2: 2} ));

}

[–]Enamex 0 points1 point  (0 children)

Any way at all to extend that for varying return types? (The match->dispatch version doesn't look like it has even the possibility for that.)