Według tego isuue issue i tym answered question nie jest możliwe, aby po prostu zdefiniować alias cechę jak:Macro do definiowania cechę aliasy
trait Alias = Foo + Bar;
Rozwiązaniem jest nieco brzydki:
trait Alias : Foo + Bar {}
impl<T: Foo + Bar> Alias for T {}
Dlatego Chcę zdefiniować makro dla tego. Próbowałem
macro_rules! trait_alias {
($name : ident, $base : expr) => {
trait $name : $base {}
impl<T: $base> $name for T {}
};
}
trait Foo {}
trait Bar {}
trait_alias!(Alias, Foo + Bar);
Ale to nie powiedzie się z powodu błędu:
src\main.rs:5:17: 5:22 error: expected one of `?`, `where`, or `{`, found `Foo + Bar`
src\main.rs:5 trait $name : $base {}
^~~~~
Prawdopodobnie Foo + Bar
nie jest wyrazem. Próbowałem kilku innych odmian, ale bez powodzenia. Czy można zdefiniować takie makro? Jak powinien wyglądać?
Czy "identyfikacja" nie jest zbyt restrykcyjna (w pierwszym przykładzie)? Nie zezwoli na coś takiego jak 'other_module :: Foo'. Myślę, że powinna to być "ścieżka". –
@ Vladimir Madveev: pozycja graniczna cechy nie podoba się 'path'. Mimo że nie używasz obejścia 'items', używanie' ident' jest twoim jedynym wyborem. –