我们可以用std::any::Any
将不同的类型聚集成Box
.
use std::any::Any;
fn foo(value: Box<dyn Any>) {
if let Some(string) = value.downcast_ref::<String>() {
println!("String: {}", *string);
} else if let Some(int) = value.downcast_ref::<i32>() {
println!("i32: {}", *int);
}
}
fn main() {
let x = Box::new("hello".to_owned());
let y = Box::new(123);
foo(x);
foo(y);
}
我们还可以使用downcast
来标识Box
中的值的类型.我了解到C++中的类型可以由虚函数来确定,根据这个问题,How does RTTI work?.然而,像i32
这样的类型也可以在铁 rust 中被降级.它怎麽工作?