#overloading #function #overwrite

nightly macro overloadable

Overloadable functions done easy in rust

7 unstable releases (3 breaking)

0.4.1 Aug 8, 2019
0.4.0 Aug 8, 2019
0.3.1 Jul 19, 2019
0.2.0 Jul 13, 2019
0.1.1 Jul 13, 2019

#9 in #overload

MIT license

17KB
338 lines

overloadable

Easy to use overloadable functions in rust using nightly features.

This crate provides you with the capabilities to overload your functions in a similar style to C# or C++, including support for meta attributes, type parameters and constraints, and visibility modifiers. Please visit the documentation for futher information.

Note

This is a nightly crate. You must include the following line in your code for this crate to compile:

#![feature(unboxed_closures, fn_traits)]

Example:

#![feature(unboxed_closures, fn_traits)]
use overloadable::overloadable;

overloadable! {
    pub func as
    #[inline(always)]
    fn(x: usize, y: usize) -> usize {
        x * y
    },
    fn<'a>(x: &'a usize) -> f32 {
        *x as f32
    },
    fn<'a, T>(x: &'a [T]) -> &'a T where T: std::fmt::Debug {
        println!("Found {:?}", &x[0]);
        &x[0]
    }
}

fn foo() {
    assert_eq!(func(2, 3), 6);
    assert_eq!(func(&32), 32.0);
    assert_eq!(func(&[1, 2, 3, 4][..]), &0);
}

Dependencies

~2MB
~48K SLoC