3 个版本
0.1.2 | 2022年12月12日 |
---|---|
0.1.1 | 2022年12月12日 |
0.1.0 | 2022年12月11日 |
#3 在 #fn-mut
20KB
430 行
simple-ref-fn
无需虚拟表的类型擦除函数包装器。
lib.rs
:
此包提供类型擦除的函数包装器,其行为类似于 &dyn Fn(T) -> R
和 &mut dyn FnMut(T) -> R
,但无需编译器生成虚拟表。
以下提供包装器类型:
示例
将函数与引用绑定
use simple_ref_fn::{RefFn, StaticRefFunction};
// Define a static function.
struct F;
impl StaticRefFunction<'_, u32, u32> for F {
type Output = u32;
fn call(data: &u32, arg: u32) -> Self::Output {
data + arg
}
}
// Bind the function with a reference.
let data = 2;
let f: RefFn<u32, u32> = F::bind(&data); // Type-erasure.
assert_eq!(f.call(3), 5);
assert_eq!(f.call(5), 7);
assert_eq!(f.call(7), 9);
擦除闭包的类型
use simple_ref_fn::RefFn;
let data = 2_u32;
let closure = |arg: u32| data + arg;
let f: RefFn<u32, u32> = RefFn::from(&closure); // Type-erasure.
assert_eq!(f.call(3), 5);
assert_eq!(f.call(5), 7);
assert_eq!(f.call(7), 9);