Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 是否有某种方法可以为任何由某个特征限定的类型实现Add特征?_Rust_Traits - Fatal编程技术网

Rust 是否有某种方法可以为任何由某个特征限定的类型实现Add特征?

Rust 是否有某种方法可以为任何由某个特征限定的类型实现Add特征?,rust,traits,Rust,Traits,我正在阅读,其中有一个添加两种不同类型的示例: use std::ops::Add; struct Millimeters(u32); struct Meters(u32); impl Add<Meters> for Millimeters { type Output = Millimeters; fn add(self, other: Meters) -> Millimeters { Millimeters(self.0 + (other

我正在阅读,其中有一个添加两种不同类型的示例:

use std::ops::Add;

struct Millimeters(u32);
struct Meters(u32);

impl Add<Meters> for Millimeters {
    type Output = Millimeters;

    fn add(self, other: Meters) -> Millimeters {
        Millimeters(self.0 + (other.0 * 1000))
    }
}
是否有某种方法可以编写更通用的
Add
trait,它看起来像这样(这是无效的):

impl添加毫米{
类型输出=米;
fn添加(&self,其他:&T)->仪表{
设as_-meters=other.to_-meters();
仪表((自身0/1000)+(as_仪表0))
}
} 

是的,除非您莫名其妙地将trait绑定放在了错误的位置,并将函数签名更改为引用而不是值。修复使其工作的问题:

impl<T: Length> Add<T> for Millimeters {
    type Output = Meters;

    fn add(self, other: T) -> Meters {
        let as_meters = other.to_meters();
        Meters((self.0 / 1000) + (as_meters.0))
    }
}
impl Add<T: Length> for Millimeters {
    type Output = Meters;

    fn add(&self, other: &T) -> Meters {
        let as_meters = other.to_meters();
        Meters((self.0 / 1000) + (as_meters.0))
    }
} 
impl<T: Length> Add<T> for Millimeters {
    type Output = Meters;

    fn add(self, other: T) -> Meters {
        let as_meters = other.to_meters();
        Meters((self.0 / 1000) + (as_meters.0))
    }
}
impl<T> Add<T> for Millimeters
where
    T: Into<Meters>,
{
    type Output = Meters;

    fn add(self, other: T) -> Meters {
        let as_meters = other.into();
        Meters((self.0 / 1000) + (as_meters.0))
    }
}