1个不稳定版本
使用旧Rust 2015
0.1.0 | 2017年4月12日 |
---|
#5 in #blanket
在 3 个crate中(通过 autoimpl)使用
3KB
DRY泛型特质的blanket实现!
你有泛型特质吗?你是否觉得为它添加blanket实现是不必要的重复?那么这个宏就是为你准备的!这是一个基于 proc-macro-hack 的宏,有助于减少一些重复,适用于任何Rust版本 >= 1.15.0。
autoimpl!
宏为所有具有与传入 autoimpl!
块中特质相同边界的 T
生成泛型特质的默认blanket实现。
注意事项
- 此功能仅适用于具有类型参数的特质
- 你只能在每个
autoimpl!
块中传递一个特质 - 目前仅支持单个类型参数
- 由于proc-macro-hack的限制,目前每个模块只能有一个
autoimpl!
块。
安装
如果你使用 Cargo
,只需将autoimpl添加到你的 Cargo.toml
[dependencies]
autoimpl = "0.1"
示例
#[macro_use] extern crate autoimpl;
struct Dog {}
struct Duck {}
fn main() {
autoimpl! {
trait Quack<T> {
fn say(&self) -> String {
"quack".to_string()
}
}
}
let dog = Dog {};
let duck = Duck {};
assert_eq!(dog.say(), duck.say());
}
依赖
~1.5MB
~41K SLoC