4个版本
0.1.3 | 2022年2月28日 |
---|---|
0.1.2 | 2022年2月11日 |
0.1.1 | 2022年2月11日 |
0.1.0 | 2022年2月11日 |
在Rust模式中排名第2429
2KB
monomo
简单特质单态化crate。特别适合与typetagcrate一起使用。
示例
假设我们有一个特质Foo<T>
,我们希望将其单态化以与typetag
一起使用,因为我们不能使用泛型特质。
trait Foo<T> {}
// Notice that you don't have to use typetag attribute,
// and the trait will still be monomorphized.
// typetag is just good example when you would like to use monomo.
monomo::rphize!(
#[typetag::serde]
Foo<i32>
);
上述宏扩展为Foo<i32>
的单态化版本。
为了为结构体实现单态化特质,我们可以这样做
// Notice that you don't have to use typetag attribute,
// and the trait will still be monomorphized.
// typetag is just good example when you would like to use monomo.
#[monomo::rphize_impl]
#[typetage::serde]
impl Foo<i32> for Bar {
// ...
}
感谢这个特性,你可以后来将Foo<i32>
实现者用作单态化特质对象。
struct BarContainer {
bars: Vec<monomo::rph!(Foo<i32>)>
}
依赖项
~1.5MB
~36K SLoC