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> {}