7个版本
0.3.0 | 2022年11月28日 |
---|---|
0.2.3 | 2022年11月10日 |
0.2.2 | 2022年9月25日 |
0.1.1 | 2022年9月13日 |
152 在 无标准库 中排名
每月下载量 49 次
在 2 个crate中使用 (通过 const_sort_rs)
15KB
252 行
Const Closure
此crate允许您创建在const上下文中表示闭包的类型。
为此,只需创建一个提供的闭包辅助函数的实例:使用 ConstClosure
和相关的 new
函数。
闭包辅助函数实例获取要捕获的数据作为相同所有权的元组(拥有、可变或ref)以及要执行的实现函数。
实现函数必须是一个 const fn
,它获取捕获的状态(一个元组:用于 FnOnce
的拥有值,用于 &mut
的可变引用和用于 Fn
的引用)以及表示闭包参数的元组。
闭包辅助函数实例在调用时返回闭包函数的返回值。
示例
#![feature(const_trait_impl)]
#![feature(const_mut_refs)] // Only required for the FnMut example
use const_closure::ConstClosure;
// FnOnce:
const _: () = {
const fn imp((state,): (i32,), (arg,): (i32,)) -> i32 {
state + arg
}
let cl = ConstClosure::new((5,), imp);
assert!(7 == cl(2));
};
// FnMut:
const _: () = {
const fn imp((state,): (&mut i32,), (arg,): (i32,)) -> i32 {
*state += arg;
*state
}
let mut i = 5;
let mut cl = ConstClosure::new((&mut i,), imp);
assert!(7 == cl(2));
assert!(8 == cl(1));
};
// Fn:
const _: () = {
const fn imp((state,): (&i32,), (arg,): (i32,)) -> i32 {
*state + arg
}
let i = 5;
let mut cl = ConstClosure::new((&i,), imp);
assert!(7 == cl(2));
assert!(8 == cl(3));
assert!(6 == cl(1));
};
注意:已经移除了 const_closure
宏,改为新的基于泛型的方法。
作者
raldone01 和 onestacked 是此库的主要作者和维护者。
许可证
该项目可在以下任一许可证下发布:
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意提交以包含在作品中的贡献将双重许可,如上所述,没有其他条款或条件。