Chcę utworzyć makro generujące formatera (Display
, Debug
, ...) dla struktury zawierającej pojedynczy typ ogólny.Problemy z tworzeniem bloku implików przy użyciu makra w Rust
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
}
}
};
}
Kiedy wywołać makro później w kodzie (create_formatter!(MyStruct<T>, std::fmt::Display);
), kompilator daje następującą opinię:
error: expected one of `,`, `=`, `>`, or `?`, found `std::fmt::Display`
--> test.rs:6:26
|
6| impl<$gen_param: $trait> $trait for $type_name<$gen_param> {
| ^^^^^^^^
Co robię źle?
Działa, jeśli użyjesz 'ident' dla specyfikatora fragmentu używanego do powiązania cechy. (Oznacza to również, że musisz wywołać to za pomocą 'Display' i dodać' use std :: fmt :: Display; '). Ale nie jestem pewien dlaczego. – wimh