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

4
我被这个运算符重载的代码卡住了。
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,因为它是一种非标量转换

是否有适用于可标量转换为T的类型特性?

1个回答

4
没有覆盖此功能的特性。只有一些类型转换是可能的,它们的完整列表可以在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 }
    }
}

您可以在这个SO答案中找到一个很好的解释,为什么需要额外的T: Add<Output = T>约束。 这个答案可能更接近您的实际情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接