簡體   English   中英

在為結構編寫派生宏時,如何訪問特征的令牌 stream?

[英]How do I access the token stream of a trait when writing a derive macro for a struct?

我有一個結構和一個特征:

struct Foo {
    i: i32,
}

trait FooTrait {
    fn foo(&self);
}

我想為生成 impl 的結構創建一個派生宏:

impl FooTrait for Foo {
    fn foo(&self) {
        println!("generated code: {}", self.i);
    }
}

當我試圖實現這一點時,我面臨的障礙是我的派生宏似乎沒有辦法知道 FooTrait 的令牌FooTrait ,我需要遍歷FooTrait的方法,並為每個生成實現基於Foo的 trait 方法!

我怎樣才能做到這一點?

這個問題不是關於如何使用quote! 引用特征 impl 並直接拼出foo - 困難的部分是我想在程序上迭代FooTrait的方法,並為每個特征方法生成一些樣板代碼。

你沒有。

通過構造,宏只提供了它們所附加的項目的源代碼。 如果將宏附加到結構,則看不到特征。

類似的派生宏包含有關正在實現的特征的知識。 它們還可以解析允許用戶配置有關生成代碼的詳細信息的自定義屬性。 您的宏可能會做同樣的事情。

也可以看看:

一種可能的解決方法:與其直接定義FooTrait ,不如將您需要的有關它的信息編碼到某種結構中,將其存儲在const中,並從派生宏和另一個生成FooTrait定義的宏中訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM