在标准库里面有一个叫做 TypeId
的类型,这个类型需要使用 use std::any::TypeId;
去引入。我们先看一个简单例子
use std::any::TypeId;
fn string() -> TypeId {
TypeId::of::<String>()
}
fn foo(para_type: TypeId) {
if TypeId::of::<String>() == para_type {
println!("参数为类型 String");
}
}
fn main() {
foo(string());
}
其实到这里我们基本上就算知道了怎么确定一个变量的类型了。不过把有的人其实特别非要让泛型冒充函数重载。其实并不是特别推荐这么瞎折腾的。不过 Rust 并没有直接把这条路堵死。所以就有了:
use std::any::TypeId;
use std::fmt::Display;
fn foo<T: 'static + Display>(para_type: T) {
if TypeId::of::<String>() == TypeId::of::<T>() {
println!("参数为类型 String");
} else if TypeId::of::<u8>() == TypeId::of::<T>() {
println!("{}", para_type);
} else {
println!("我真没想到您还有这种操作");
}
}
fn main() {
foo("一个 String 类型的字符串".to_string());
foo(0u8);
foo(-1);
}
反正这种写法,正常人一般不会这样瞎折腾的。
1
共 4 条评论, 1 页
评论区
写评论最后说了正常人一般不会这样瞎折腾的
无聊。。。
这个问题我问过,但是这样的解法巨恐怖
6666。
开眼界了。