目前,实现自定义derive
宏根本不需要实际Trait
存在。它所做的只是在注释项后附加任意代码块,并且显然从中删除“辅助属性”。也就是说,我们可以做类似以下的事情:
#[proc_macro_derive(FakeTrait)]
pub fn custom_derive(input: TokenStream) -> TokenStream {
let name = ... // Get the ident name from input
....
quote! {
impl #name {
fn custom_function(...) {
...
}
}
}.into()
}
然后我们可以通过这个struct
宏
#[derive(FakeTrait)]
struct MyStruct {...}
并且它会很乐意地工作,通过附加impl MyStruct
到它,无论是否存在FakeTrait
。
我的问题是,这是否是宏的可接受用例derive
?它有什么缺点吗?将来可能会出现故障吗?