Как сопоставить трейт в макросе Rust?
Моя цель - взять как входной тип признака.
my_test_macro!(Trait1, Trait2<Test1, Test2=Test3>)
До сих пор я пытался написать такой парсер.
$( $ty:ident < $( $N:ident $(: $b0:ident $(+$b:ident)* )? ),* $($tname:ident=$ttype:ident),* > )+*
Но это создало локальную двусмысленность.
error: local ambiguity: multiple parsing options: built-in NTs ident ('N') or ident ('tname').
1 ответ
Решение
Вы можете использовать ty
или path
метапеременные, в зависимости от того, что вы хотите сделать:
macro_rules! my_test_macro {
($t1:ty, $t2:path) => {};
}
fn main() {
my_test_macro!(Trait1, Trait2<Test1, Test2 = Test3>);
}
Смотрите также: