【问题标题】:Is there a trait for scalar-castable types?标量可转换类型有一个特征吗?
【发布时间】:2017-01-26 08:01:09
【问题描述】:

对于运算符重载,我一直坚持使用此代码。

use std::ops::Add;

struct Test<T: Add>{
    m:T
}

impl<T:Add> Add for Test<T>{
    type Output = Test<T>;
    fn add(self, rhs: Test<T>) -> Test<T> {
        Test { m: (self.m + rhs.m) as T }
    }
}

我无法将 (self.m + rhs.m) 转换为 T,因为它是 non-scalar cast

类型标量可转换为T 有一个特征吗?

【问题讨论】:

    标签: generics rust traits


    【解决方案1】:

    不,没有涵盖此功能的特征。只有一些演员是可能的,他们的完整名单可以在The Book找到。

    对于您的Add 实现,您应该按以下方式对其进行修改以使其正常工作:

    use std::ops::Add;
    
    struct Test<T: Add>{
        m: T
    }
    
    impl<T> Add for Test<T> where T: Add<Output = T> {
        type Output = Self;
    
        fn add(self, rhs: Self) -> Self {
            Test { m: self.m + rhs.m }
        }
    }
    

    您可以在this SO answer 中找到一个很好的解释为什么额外的T: Add&lt;Output = T&gt; 绑定是必要的。 This one 可能更接近您的确切情况。

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2015-07-29
      • 1970-01-01
      • 2011-12-24
      • 2019-08-11
      相关资源
      最近更新 更多