Generics 如何避免Rust中重复的长通用约束

Generics 如何避免Rust中重复的长通用约束,generics,rust,constraints,traits,Generics,Rust,Constraints,Traits,我正在尝试自己实现大整数(只是为了教育)。根据数据类型,实现是通用的: struct LongNum<T> where T: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8> { values: Vec<T>, powers: Vec<u8>, radix: u8, } 这意味着,如果我不将某些类型添加到此IMPL列表中,则我的板条箱用户将无法将

我正在尝试自己实现大整数(只是为了教育)。根据数据类型,实现是通用的:

struct LongNum<T>
where T: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8>
{
    values: Vec<T>,
    powers: Vec<u8>,
    radix: u8,
}
这意味着,如果我不将某些类型添加到此IMPL列表中,则我的板条箱用户将无法将此类型用于LongNum,即使此类型已通过所有约束

是否有任何方法可以避免编写长时间重复的CostRaint而不给用户添加不必要的限制?

您可以添加一个全面的实现:

T的impl LongNumValue
哪里
T:Integer+MulAssign+CheckedMul+checkedd+Copy+From{}

你的意思是类似的?
trait LongNumValue: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8> {}

struct LongNum<T: LongNumValue>
{
    values: Vec<T>,
    powers: Vec<u8>,
    radix: u8,
}
impl LongNumValue for u8 {}
impl LongNumValue for u16 {}
impl LongNumValue for u32 {}
...
impl<T> LongNumValue for T 
where
    T: Integer + MulAssign + CheckedMul + CheckedAdd + Copy + From<u8> {}