2016-11-23 94 views
3

我想創建一個泛型結構,它使用「整數類型」引用到數組中。由於性能方面的原因,我希望能夠輕鬆指定是否使用u16,u32u64。像這樣的東西(這顯然是無效的防鏽代碼):限制泛型類型爲幾種類型

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

有沒有什麼辦法來表達這一點?

回答

6

對於數組引用,通常只使用usize而不是不同的整數類型。

但是,做你是什麼,你可以創建後的新特點,實現該特性爲u16u32u64,然後限制噸至您的新特點。

pub trait MyNewTrait {} 

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

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

然後你可以還可以添加方法到MyNewTraitimpl s到封裝具體到u16u32u64邏輯。

+0

是的,但是這不允許我用u16,u32或u64做所有我能做的事 - 例如我無法使用值來檢索數組的元素,比較兩個值等。 –

+3

@HenningKoehler:您可以,您只需要在特徵級別聲明它。這就是'酒吧特質MyNewTrait:添加 + Mul <輸出= Self> + ... {}' –

+0

我想,但這也很快變得單調乏味......並且爲了引用我需要的矢量轉換爲usize,對於任意類型可以添加,相乘等似乎不是很安全的。 –