< 返回版块

github.com/shanliu/lsys 发表于 2022-04-30 23:10

enum aa {
    a(i128),
    b(i32)
}

fn add_email<T>()->T{
    
    let a=aa::a(1);
    let b=aa::b(2);
    //如何实现判断T类型,当T为i128时返回1
    //如何实现判断T类型,当T为i32时返回1
    todo!()
}

 fn main() {
    assert!(add_email::<i128>()==1);
    assert!(add_email::<i32>()==2);
}

评论区

写评论
作者 github.com/shanliu/lsys 2022-05-02 20:11

用其他方法代替了,用trait改动太大。不能用macro

dlhxzb 2022-05-01 11:01

这样吗?

macro_rules! add_email {
    ($ty: tt) => {
        match stringify!($ty) {
            "i128" => 1 as $ty,
            "i32" => 2 as $ty,
            _ => panic!("unknown"),
        }
    }
}

 fn main() {
    assert!(add_email!(i128)==1_i128);
    assert!(add_email!(i32)==2_i32);
}
苦瓜小仔 2022-05-01 00:41

不知道你要干嘛,但你可以用 trait 通过断言。

fn add_email<T: Classify>() -> T {
    T::N
}

trait Classify {
    const N: Self;
}

impl Classify for i128 {
    const N: i128 = 1;
}

impl Classify for i32 {
    const N: i32 = 2;
}

fn main() {
    assert!(add_email::<i128>() == 1);
    assert!(add_email::<i32>() == 2);
}

playground

1 共 3 条评论, 1 页