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



我想将特定类型返回到泛型类型,所有类型都是内置类型,所以它不能为u32{…}执行From

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

有什么好办法吗?

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

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

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

我找到了一种方法,但我不确定是否存在大问题:


fn fn1<T: Default + Copy>() -> T {
let mut a = 123456789u64;
let t = unsafe { std::mem::transmute::<&mut u64, &mut T>(&mut a) };
*t
}
fn main() {
let a = fn1::<u32>();
dbg!(a);
}

最新更新