如何将特定类型转换为泛型类型(所有内置类型)?

我想将特定类型返回到泛型类型,都是内置类型,所以不能 impl From for u32 { ... }

fn fn1<T>() -> T {
    let a = 123u64;
    a as T
    // ^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
}

fn main() {
    let a = fn1::<u32>();
    dbg!(a);
}

有什么好办法吗?

回答

首先,您应该注意,您所做的从根本上来说是不安全的,因为您将较大的类型安装在较小的类型中。

然后,您应该使用特征来指定您的泛型函数适用于可以转换的类型:

use std::convert::{TryFrom, TryInto};

fn fn1<T: TryFrom<u64>>() -> T {
    let a = 123u64;
    a.try_into().unwrap_or_else(|_| {
        panic!("maybe improve the behavior here");
    })
}

fn main() {
    let a = fn1::<u32>();
    dbg!(a);
}

  • @Anunaki 我不明白你对这条评论的意思。你没有实现这个特性,只是使用它。如果需要,您可以在自己的类型上实现它。

以上是如何将特定类型转换为泛型类型(所有内置类型)?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>