2017-09-03 13 views
1

ジェネリック型Tのプロパティを持つ構造体を作成したいと思います。このジェネリック型は計算に使用されるので、Tをi32、u32、f32、uf32、i64などのすべての種類の数値型にしますどのように私はそれを達成することができますか?Tustを拘束して、数値型のみを受け入れることはできますか?

+0

おそらく 'Copy'トレイトに加えて、あなたが実際に必要な特性に依存しないのはなぜ?これは将来的に考案された数字や数字のようなもの(複雑な数字や非標準のサイズを考える)をカバーします。 – user4815162342

答えて

5

これはnum-traits crateが使用できるものです。 Num traitは、すべての数値型に対して実装されています。

これはあなたのジェネリック型Tは、予想数値演算子のすべてを持っているAddSubMulDivRemPartialEq経由で確認部分的に平等することができ、それはまた1Tため0の値を公開し保証します。

あなたはクレートの特性hereをどのように実装するかを見ることができます:

int_trait_impl!(Num for usize u8 u16 u32 u64 isize i8 i16 i32 i64); 
+0

ありがとうございます。しかし、この権利を実装するにはRust言語自体に方法が必要ですか?例えば、C#では、受け入れられた型を制約するwhereキーワードがあります。クレート自体は、これを行うためにいくつかの言語機能を使用していたに違いありません。 – Midas

+1

@Midas彼らは 'Num'という特性を定義し、すべての標準数値型に対して実装しました。 'Num 'という独自の特性を作り、すべての数値型に対して実装することができますが、クレートを使うこともできます。 – Lukazoid

+3

ちょうど木箱が何をするかを見て、彼らは水で調理しているだけです – the8472

関連する問題