generics - 如何将特定类型转换为泛型类型(所有内置类型)?
问题描述
我想将特定类型返回到泛型类型,都是内置类型,所以它不能实现 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);
}