我想创建一个对给定类型列表进行操作的宏,但我需要能够存储正在处理的其他类型。
我想做的一个简单的例子:
struct Foo;
struct Bar {
foo: Foo,
data: u32,
}
baz!(Foo, Bar);
// outputs
struct OptFoo;
struct OptBar {
foo: OptFoo,
data: u32
}
问题是它似乎macro_rules
不允许我存储临时状态(即HashSet
,我将标记哪些类型是宏调用的一部分)。我想到的唯一解决方法是编写我想要的内容proc_macro_derive
并为我需要的每种类型手动添加自定义属性,但这显然远非完美......
编辑:
这个问题类似于这个问题,但在这里我试图在一个宏调用中本地和临时保存一个状态(基本上在存储有关这些参数的数据时对参数进行两次传递)。然而,这似乎也是不可能的。