标量可转换类型是否有特征?

Is there a trait for scalar-castable types?

我被这个运算符重载代码困住了。

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 的类型有特征吗?

不,没有涵盖此功能的特性。只有一些演员是可能的,他们的完整列表可以在 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 }
    }
}

你可以找到一个很好的解释,为什么在 . 中需要额外的 T: Add<Output = T> 界限可能更接近你的确切情况。