#function #overload #overwrite

nightly macro overloadable

Rust 中轻松实现可重载函数

7 个不稳定版本 (3 个破坏性更新)

0.4.1 2019 年 8 月 8 日
0.4.0 2019 年 8 月 8 日
0.3.1 2019 年 7 月 19 日
0.2.0 2019 年 7 月 13 日
0.1.1 2019 年 7 月 13 日

#1705过程宏

MIT 许可证

17KB
338

overloadable

使用 nightly 功能轻松在 Rust 中使用可重载函数。

此 crate 提供了类似于 C# 或 C++ 的函数重载功能,包括对元属性、类型参数和约束以及可见性修饰符的支持。请访问文档获取更多信息。

注意

这是一个 nightly crate。您必须在代码中包含以下行才能编译此 crate

#![feature(unboxed_closures, fn_traits)]

示例

#![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);
}

依赖关系

~2MB
~46K SLoC