0

我试图在 Rust 中创建一个派生宏来创建实例,例如,它应该实现以下特征:

pub trait MyTrait {
    fn my_default() -> Option<Self>;
}

我使用synandquote来解析和生成 AST,如下所示:

#[proc_macro_derive(MyTrait)]
pub fn my_default_derive(input: TokenStream) -> TokenStream {
    // Use `syn` to parse
    // ...

    let gen = quote! {
        impl #impl_generics_strait::MyTrait for #name #ty_generics #where_clause {
            fn my_default() -> Option<Self>{
                // ...
            }
        }
    };

    gen.into()
}

由于编译器在编译时不知道是什么Self,上述会导致错误:

the size for values of type `Self` cannot be known at compilation time

我的问题是:

  • 是否可以在中使用 Self proc_macro_derive
  • 如何?

顺便说一句,我正在尝试改用 ident,稍后会在此处发布进度。

更新

  • 事实证明,错误是由 trait 声明引起的,而不是proc_macro_derive. 要修复,Sized应添加到特征名称。
4

0 回答 0