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

Anu*_*aki 0 generics types rust

我想将特定类型返回到泛型类型,都是内置类型,所以不能 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);
}
Run Code Online (Sandbox Code Playgroud)

有什么好办法吗?

Den*_*ret 6

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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