基本的には前回定義したように抽象的なtraitを組み合わせて 汎用的な構造体を構築するのが正道だと思うが、 そうは言っても特定の型へのキャストが必要になるときに困る事がある。 現状のtraitを組み合わせた方法の限界 具体的にはユークリッド距離を返すnormメソッドを想定する。 ユークリッド距離に関しては平方根をとる事になるのでので float系の何かの型へのキャストが必要になる。 impl<T> Point<T> where T:Mul+Copy,<T as Mul>::Output:Add { pub fn norm(self) -> f64 { ((self.x*self.x+self.y*self.y) as f64).sqrt() } }