首页 > 解决方案 > 如何将特定类型转换为泛型类型(所有内置类型)?

问题描述

我想将特定类型返回到泛型类型,都是内置类型,所以它不能实现 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);
}

有什么好办法吗?

标签: genericstypesrust

解决方案


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

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

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);
}

推荐阅读