Generics 如何在不重复的情况下,以相同的方式实现多种类型的特征?

Generics 如何在不重复的情况下,以相同的方式实现多种类型的特征?,generics,rust,Generics,Rust,给定一个特性,我们可能希望为许多类型实现它 pub trait RTypeUnit { fn zero() -> Self; fn one() -> Self; } impl RTypeUnit for usize { fn zero() -> usize { 0 } fn one() -> usize { 1 } } impl RTypeUnit for isize { fn zero() -> isize { 0 } fn one() ->

给定一个特性,我们可能希望为许多类型实现它

pub trait RTypeUnit {
    fn zero() -> Self;
    fn one() -> Self;
}

impl RTypeUnit for usize { fn zero() -> usize { 0 } fn one() -> usize { 1 } }
impl RTypeUnit for isize { fn zero() -> isize { 0 } fn one() -> isize { 1 } }
impl RTypeUnit for u64 { fn zero() -> u64 { 0 } fn one() -> u64 { 1 } }
impl RTypeUnit for i64 { fn zero() -> i64 { 0 } fn one() -> i64 { 1 } }
impl RTypeUnit for u32 { fn zero() -> u32 { 0 } fn one() -> u32 { 1 } }
impl RTypeUnit for i32 { fn zero() -> i32 { 0 } fn one() -> i32 { 1 } }
impl RTypeUnit for u16 { fn zero() -> u16 { 0 } fn one() -> u16 { 1 } }
impl RTypeUnit for i16 { fn zero() -> i16 { 0 } fn one() -> i16 { 1 } }
impl RTypeUnit for u8 { fn zero() -> u8 { 0 } fn one() -> u8 { 1 } }
impl RTypeUnit for i8 { fn zero() -> i8 { 0 } fn one() -> i8 { 1 } }
避免为每种类型写出函数的惯用方法是什么?我应该使用默认实现还是宏

我知道这些特定方法的
num
板条箱,但我想知道在一般情况下如何做到这一点。

根据:

实现是为特定类型实现特征的项

查看中
Zero
One
的实现(自Rust 1.11以来已弃用,为了简洁起见,我删除了弃用属性):


如果标准文档使用宏,我怀疑是否存在更好的方法。

请注意,这只适用于类型推断
0
1
可以表示
u8
u32
i64
。在大多数情况下,您必须详细说明所需的特定值。
pub trait Zero: Sized {
    fn zero() -> Self;
}

pub trait One: Sized {
    fn one() -> Self;
}

macro_rules! zero_one_impl {
    ($($t:ty)*) => ($(
        impl Zero for $t {
            #[inline]
            fn zero() -> Self { 0 }
        }
        impl One for $t {
            #[inline]
            fn one() -> Self { 1 }
        }
    )*)
}
zero_one_impl! { u8 u16 u32 u64 usize i8 i16 i32 i64 isize }