繁体   English   中英

如何避免Rust中重复的长泛型约束

[英]How to avoid repetitive long generic constraints in Rust

我正在尝试自己实现大整数(仅用于教育)。 该实现是通用的数据类型:

struct LongNum<T>
where T: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8>
{
    values: Vec<T>,
    powers: Vec<u8>,
    radix: u8,
}

问题是我需要在所有impl中重复这个详细的约束。 这太麻烦了。

我可以结合这些约束来制作自己的特性,如下所示:

trait LongNumValue: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8> {}

struct LongNum<T: LongNumValue>
{
    values: Vec<T>,
    powers: Vec<u8>,
    radix: u8,
}

但在这种情况下,我必须为这个LongNumValue特性添加impls到可以在LongNum中使用的所有类型:

impl LongNumValue for u8 {}
impl LongNumValue for u16 {}
impl LongNumValue for u32 {}
...

这意味着如果我不在这个impl列表中添加一些类型,我的crate的用户将无法将此类型用于LongNum,即使此类型传递了所有约束。

有没有办法避免编写长重复的成本,而不给用户增加不必要的限制?

您可以添加一揽子实施

impl<T> LongNumValue for T 
where
    T: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8> {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM