2017-01-26 18 views
3

オペレータのオーバーロードのためにこのコードが残っています。スカラーキャスタブル型の特徴はありますか?

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 } 
    } 
} 

それはnon-scalar castあるので、私はT(self.m + rhs.m)をキャストすることはできません。

Tにスカラーキャスタブルタイプの特性がありますか?

答えて

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 } 
    } 
} 

あなたは束縛追加T: Add<Output = T>this SO answerに必要な理由は良い説明を見つけることができます。 This oneはあなたの正確なケースにもっと近いかもしれません。

関連する問題