小编Ben*_*her的帖子

在Rust中使用宏创建impl-block的问题

我想创建一个宏生成一个给定的格式(Display,Debug包含一个通用型的结构体,...).

macro_rules! create_formatter {
    ($type_name:ident<$gen_param:ident>, $trait:path) => {
        impl<$gen_param: $trait> $trait for $type_name<$gen_param> {
            fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
                // isn't yet implemented 
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

当我稍后在代码(create_formatter!(MyStruct<T>, std::fmt::Display);)中调用宏时,编译器会给出以下反馈:

error: expected one of `,`, `=`, `>`, or `?`, found `std::fmt::Display`
--> test.rs:6:26
 |
6|         impl<$gen_param: $trait> $trait for $type_name<$gen_param> {
 |                          ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

generics macros rust

9
推荐指数
1
解决办法
180
查看次数

标签 统计

generics ×1

macros ×1

rust ×1