rust 仅在“可浇铸”类型上实现的特性

ssm49v7z  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(114)

当我有以下枚举时:

#[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

y4ekin9u

y4ekin9u1#

这是不可能的,你需要把这个方法留在trait中,不做默认实现,然后为你想要的类型实现它。
有一些RFC允许您这样做,例如#3046,但没有一个被接受。

相关问题