【发布时间】:2016-05-03 08:57:37
【问题描述】:
我有这样定义的结构
struct Shape<T> {
line_one: T,
line_two: T,
}
我正在尝试创建一个简单的特征和实现,使用这个结构来计算一些简单的数学。
我的 trait 和 impls 看起来像这样
trait Calculate<T: Mul<Output = T>> {
fn calc(&self, Shape: T) -> T;
}
impl<T> Calculate<T> for Shape<T> {
fn calc(&self, Shape: T) -> T {
self.line_one * 2 + self.line_two * 2
}
}
impl Calculate<i32> {
fn calc(&self) -> i32 {
self.line_one * 2 + self.line_two * 2
}
}
fn calc_fn<T: Calculate<i32>>(calculate: T) {
calculate.calc();
}
当我将它放入 Rust 操场时,编译失败,因为 Mul 未在 impl Calculate<T> 中实现。但是,如果我将 <T> 更改为 <T: Mul<Output = T>>,我会收到以下错误:
<anon>:14:21: 14:22 error: expected one of `!`, `(`, `+`, `,`, `::`, `<`, or `>`, found `:`
<anon>:14 impl <T> Calculate<T: Mul<Output = T>> for Shape<T>
我不知道如何在impl Calculate<T> 中为T 实现Mul。
我想要实现的是我可以发送 f32 或 i32 的代码,而无需创建两个不同的 impl 定义,因此只需传入 T。
【问题讨论】: