2017-09-03 55 views
1

我想創建一些具有泛型類型T的屬性的結構體。這個泛型類型將用於計算,所以我希望T是各種數字類型,比如i32,u32,f32,uf32,i64等。我怎樣才能做到這一點?如何限制Rust中的T只接受數字類型?

+0

爲什麼不取決於你實際需要的特質,除了也許'Copy'特質?這將涵蓋將來設計的數字和類似數字的對象(考慮複數或非標準尺寸)。 – user4815162342

回答

5

這就是num-traits crate可用於什麼。 Num trait適用於所有數字類型。

這可以確保您的泛型類型T具有所有預期數值運算,AddSubMulDivRem,可以部分通過平等檢查PartialEq,它也暴露了10T的值。

你可以看到箱子是如何實現的特質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

相關問題