提问人:Rahn 提问时间:11/9/2023 最后编辑:Rahn 更新时间:11/9/2023 访问量:49
如何获取 &dyn 特征背后的变量类型?
How do I get the type of a variable behind a &dyn Trait?
问:
在下面的示例中,我尝试打印出变量和(都具有类型和implements trait)的类型。x
y
Foo
Foo
Bar
但是当传递到一个函数中时,被传递为但传递为,我从和那里得到了不同的类型名称:print_name()
x
&Foo
y
&dyn Bar
x
y
x: &rust_test::Foo
y: &dyn rust_test::Bar
如何修复此程序以在将变量传递到函数中时获得一个?Foo
&dyn Bar
完整代码:
use std::any::type_name;
fn type_of<T: ?Sized>(_: &T) -> String {
type_name::<T>().to_string()
}
struct Foo {}
trait Bar {}
impl Bar for Foo {}
fn print_name(x: &Foo, y: &dyn Bar) {
println!("x: {}", type_of(&x));
println!("y: {}", type_of(&y));
}
fn main() {
let x = Foo {};
let y = Foo {};
print_name(&x, &y);
/*
x: &rust_test::Foo
y: &dyn rust_test::Bar
*/
}
答: 暂无答案
评论
std::any::type_name()
仅用于调试目的。你真的需要它吗?TypeId
(不过,它也有同样的问题)。type_name()
Any
type_id
as_any