我正在尝试创建一个宏,该宏生成一个struct
提供一组传递给宏的方法。例如,调用:
create_impl!(StructName, fn foo() -> u32 { return 432 })
StructName
应该生成一个提供方法的空结构foo()
。
我最初尝试使用item
宏 arg 类型。但是,当我尝试item
在规则中使用 an 时,出现以下编译器错误:
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn foo() -> u32 { return 42; }`
--> src/lib.rs:40:13
|
40 | $($function)*
| ^^^^^^^^^
是否可以使用item
参数以这种方式在生成的结构中定义方法?有什么我想念的吗?
这是我定义的完整宏:
macro_rules! create_impl {
($struct_name:ident, $($function:item),*) => {
struct $struct_name {
}
impl $struct_name {
// This is the part that fails.
$($function)*
}
};
}