#overloading #function #arguments #variables #variadic

overfn

为具有不同参数的函数提供简单的重载系统

3 个版本

0.1.2 2023年7月23日
0.1.1 2023年7月23日
0.1.0 2023年7月23日

#1252 in 开发工具

MIT/Apache

12KB
116 代码行

重载函数 (overfn)

此包允许您通过 overload 宏来重载具有相同名称但参数数量不同的函数。在重载所有函数后,您需要使用 macros!() 宏来生成调用重载函数的宏。

示例

use overfn::*;

#[overload]
fn test(item: usize) -> usize {
    item
}

#[overload]
fn test(left: usize, right: usize) -> usize {
    left + right
}

struct Test(usize);

impl Test {
    #[overload(Test)]
    fn new() -> Self {
        Self(0)
    }

    #[overload(Test)]
    fn new(item: usize) -> Self {
        Self(item)
    }

    #[overload(Test)]
    fn test(&self) -> usize {
        self.0
    }

    #[overload(Test)]
    fn test(&self, other: usize) -> usize {
        self.0 + other
    }
}

macros!();

assert_eq!(test!(2), 2);
assert_eq!(test!(2, 2), 4);

let test = Test_new!();
assert_eq!(test.0, 0);

let test = Test_new!(2);
assert_eq!(test.0, 2);

assert_eq!(Test_test!(test), 2);
assert_eq!(Test_test!(test, 2), 4);

文档

您可以在 此处 找到文档。

限制

  • 目前,您不能重载具有不同类型但参数数量相同的函数。
  • 您需要使用 macros!() 宏来生成调用重载函数的宏。
  • 如果您重载类方法或实例方法,需要在属性中传递类名。

许可证

本项目可根据您的选择,在 MIT 许可证Apache 许可证 2.0 版 下使用。

依赖项

~300–770KB
~18K SLoC