我正在尝试为Rust中的trait创建一个默认实现,沿着一个仅适用于某些类型的实现。
假设我在这里有这个rust代码:
trait Foo {
fn function();
}
impl<T> Foo for T {
fn function() {
println!("any type")
}
}
impl<T: From<f32>> Foo for T {
fn function() {
println!("only f32 related types")
}
}
这导致了冲突的实现。有没有办法解决这个问题?
1条答案
按热度按时间jhdbpxl91#
由于 any type 的默认实现不使用任何特定于这种类型的东西,因此您可以直接在trait中定义默认实现。
这样做,你可以为你自己的类型实现这个trait,而不需要重新定义相同的函数。
然而,对于其他类型(来自另一个crate),这是不可能的,因为没有什么可以保证这样的类型不会在该crate的未来版本中实现
From<f32>
。如果发生这种情况,这两个实现将是冲突的。