trait Area<T>{
fn area(&self)->T;
}
struct Rect<T>{
x_side:T,
y_side:T,
}
struct Circle<T>{
r:T,
}
impl<T:std::ops::Mul> Area<T> for Rect<T>{
fn area(&self)->T{
self.x_side*self.y_side
}
}
代码如上,在为Rect实现Area时,需要x_side和y_side做乘法,所以T bond 了std::ops::Mul,可是Mul内部的OutPut怎么规定?
1
共 10 条评论, 1 页
评论区
写评论任何类型实际上都实现了到自己的Into
任何类型实际上都实现了到自己的Into
这样太麻烦了吧,而且基础类型貌似都没有实现Into trait
正解
impl<T: std::ops::Mul<Output=T> + Clone > Area for Rect { fn area(self)->T{ self.x_side.clone()*self.y_side } }
参考实现:
实现思路:
http://mp.weixin.qq.com/s/L5-xN3Ll09NdE-CEKgatMg
impl Area for Rect where T: std::ops::Mul + Clone, ::Output: Into, { fn area(&self) -> T { (self.x_side.clone() * self.y_side.clone()).into() } }