5
根據該isuue issue這answered question,不可能簡單地定義諸如性狀別名:宏定義性狀別名
trait Alias = Foo + Bar;
解決方法是有點難看:
trait Alias : Foo + Bar {}
impl<T: Foo + Bar> Alias for T {}
因此我想爲此定義一個宏。我試圖
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);
但它失敗,錯誤:
src\main.rs:5:17: 5:22 error: expected one of `?`, `where`, or `{`, found `Foo + Bar`
src\main.rs:5 trait $name : $base {}
^~~~~
大概Foo + Bar
不是一個表達式。我嘗試了幾個其他的變化,但沒有運氣。有沒有可能定義這樣一個宏?它應該是什麼樣子?
是不是'ident'限制太多(在第一個例子中)?它不會允許像'other_module :: Foo'這樣的東西。我想它應該是'路徑'。 –
@VladimirMatveev:特質邊界位置不喜歡'路徑'。雖然沒有使用'items'解決方法,但使用'ident'是您唯一的選擇。 –