当我有以下枚举时:
#[repr(u8)]
enum Animal {
Cat,
Dog,
Mouse,
}
可以简单地使用以下命令将其强制转换为u8
let n = Animal::Cat as u8
现在,我想用一个函数来实现trait ToU8
:
trait ToU8 {
fn to_u8(self) -> u8 { self as u8 }
}
上面的代码当然会抛出一个错误,因为as
可能不适用于所有类型。有什么方法可以让它工作吗?我如何通知编译器Self
将适用于as
?
1条答案
按热度按时间y4ekin9u1#
这是不可能的,你需要把这个方法留在trait中,不做默认实现,然后为你想要的类型实现它。
有一些RFC允许您这样做,例如#3046,但没有一个被接受。