我正在尝试为我的特质实现自定义派生宏,它们实际上起作用了!
但是我有一个小问题。我似乎找不到一种将通用参数包含到特质中的方法。
具体来说,我想做这样的事情:#[derive(MyCustomDerive<'a, B, C>)]
而现在,我正在硬编码泛型参数,像这样:
let gen = quote! {
impl #impl_generics Graph<'a, V, E> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<V, E> {
&self.map
}
...
}
正如您所看到的,我在引用块中固定了'a,V和E,而不是我想实现的灵活推导出所需通用类型的特征。
我想要的是类似于这样的东西:
#[derive(MyCustomDerive<'a, B, C>)]
从而产生与此等效的结果
let gen = quote! {
impl #impl_generics Graph<'a, B, C> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<B, C> {
&self.map
}
...
}
这将使我能够为其他事情保留(当然必要时)V和E,并且在我看来可以使代码更易控制。
感谢您的帮助!
更新1:
这是我的导出函数的样子pub fn derive(ast: &syn::DeriveInput) -> TokenStream {
let name = &ast.ident;
let generics = &ast.generics;
let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
let gen = quote! {
impl #impl_generics Graph<'a, V, E> for #name #ty_generics #where_clause {
fn Map(&self) -> &MAP<V, E> {
&self.map
} ...
syn
crate 吗? - Boiethios