如何为特定类型创建自定义实现?
How do I create a custom implementation for a specific type?
我有这个代码:
pub struct Tuple2<T>(pub T, pub T);
// default realization
impl<T: Mul<Output = T>> Mul<Tuple2<T>> for Tuple2<T>
{
type Output = Tuple2<T>;
fn mul(self, rhs: Tuple2<T>) -> Tuple2<T>
{
Tuple2(self.0 * rhs.0, self.1 * rhs.1)
}
}
现在我想覆盖 Tuple2<f32>
的方法:
// specific realization for f32
impl Mul<Tuple2<f32>> for Tuple2<f32>
{
type Output = Tuple2<f32>;
fn mul(self, rhs: Tuple2<f32>) -> Tuple2<f32>
{
// custom code
Tuple2(self.0 * rhs.0, self.1 * rhs.1)
}
}
错误:
trait core::ops::Mul
[E0119]
的实现冲突
你不能这样做,因为 Rust 目前没有 impl 特化 - 任何类型的任何特征(和一组输入参数)只能有一个实现,任何冲突的实现都会产生编译器错误。
我有这个代码:
pub struct Tuple2<T>(pub T, pub T);
// default realization
impl<T: Mul<Output = T>> Mul<Tuple2<T>> for Tuple2<T>
{
type Output = Tuple2<T>;
fn mul(self, rhs: Tuple2<T>) -> Tuple2<T>
{
Tuple2(self.0 * rhs.0, self.1 * rhs.1)
}
}
现在我想覆盖 Tuple2<f32>
的方法:
// specific realization for f32
impl Mul<Tuple2<f32>> for Tuple2<f32>
{
type Output = Tuple2<f32>;
fn mul(self, rhs: Tuple2<f32>) -> Tuple2<f32>
{
// custom code
Tuple2(self.0 * rhs.0, self.1 * rhs.1)
}
}
错误:
trait core::ops::Mul
[E0119]
你不能这样做,因为 Rust 目前没有 impl 特化 - 任何类型的任何特征(和一组输入参数)只能有一个实现,任何冲突的实现都会产生编译器错误。