2016-11-23 91 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,对于任意类型可以添加,相乘等似乎不是很安全的。 –