2016-11-23 6 views
3

配列への参照に「整数型」を使用する汎用構造体を作成しようとしています。パフォーマンス上の理由から、u16u32u64のいずれを使用するかを簡単に指定できるようにしたいと考えています。このようなもの(明らかに有効な錆コードではない):ジェネリック型をいくつかの型に限定してください

struct Foo<T: u16 or u32 or u64> { ... } 

これを表現する方法はありますか?

答えて

6

通常、配列への参照は、異なる整数型ではなくusizeを使用します。

しかし、新しい形質を作成することができたら、その形質をu16,u32およびu64に実装し、Tを新しい形質に制限します。

pub trait MyNewTrait {} 

impl MyNewTrait for u16 {} 
impl MyNewTrait for u32 {} 
impl MyNewTrait for u64 {} 

struct Foo<T: MyNewTrait> { ... } 

それからまたu16u32u64に固有のロジックをカプセル化するMyNewTraitimplの上にメソッドを追加することもできます。

+0

はい、しかし、それで私はu16、u32、またはu64でできることすべてを行うことができません。値を使って配列の要素を取得したり、2つの値を比較することはできませんでした。 –

+3

@HenningKoehler:できるだけ、特性レベルで宣言する必要があります。それはパブの特性です。MyNewTrait:Add + Mul + ... {} ' –

+0

私はそう思っていますが、それもかなり速く面倒になります。追加することができる任意の型に対して非常に安全ではないように見えるusizeへの変換は... –

関連する問題