4个版本
0.1.3 | 2023年8月8日 |
---|---|
0.1.2 | 2023年8月8日 |
0.1.1 | 2022年3月7日 |
0.1.0 | 2022年3月6日 |
在 过程宏 中排名第 365
10KB
103 行
单态宏
此crate提供了 #[mono]
宏,用于强制泛型函数使用给定类型进行单态化。
搭配rustc中的 share-generics
模式,这可以导致更少的代码,详情见 https://github.com/rust-lang/rust/pull/48779。
[dependencies]
mono-macro = "0.1"
用法
由于我们是自行单态化,您需要手动指定静态调度
在裸函数的情况下,
#[mono(T = i32, U = i64)]
fn func<T, U>(t: T, u: U) {
...
}
它将被展开为
pub const _: *const () = (&foo::<i32, i64>) as *const _ as _;
fn func<T, U>(t: T, u: U) {
...
}
对于更复杂的情况,请使用 mono_macro!
代替
trait Tr<T> {
fn foo(&self, _t: T) {}
}
struct Foo<'a> {
t: &'a str,
}
impl<'a, T> Tr<T> for Foo<'a> {
fn foo(&self, _t: T) {}
}
mono_macro!(<Foo<'static> as Tr<i32>>::foo);
这将展开为
trait Tr<T> {
fn foo(&self, _t: T) {}
}
struct Foo<'a> {
t: &'a str,
}
impl<'a, T> Tr<T> for Foo<'a> {
fn foo(&self, _t: T) {}
}
pub const _: *const () = (&<Foo<'static> as Tr<i32>>::foo) as *const _ as _;
许可证
根据您的选择,在Apache License,Version 2.0或MIT许可证下许可。 Apache License, Version 2.0 或 MIT license除非您明确表示否则,根据Apache-2.0许可证的定义,您提交的任何有意包含在此crate中的贡献,将根据上述条款双许可,不附加任何其他条款或条件。
依赖关系
~1.5MB
~35K SLoC