具有相同参数和结果类型的两个fn
类型中的TypeId
在非一般函数中采用TypeId
与用相同类型实例化的一般函数中采用TypeId
不同:
在这个rust程序(permalink)中,虽然&dyn I
(第4行)和&T
(第12行)打印相同的TypeId
,但当这些字体被包装成fn
类型时,打印的TypeId
是不同的(第5行和第13行).
use std::any::TypeId;
fn main() {
dbg!(TypeId::of::<&dyn I>());
dbg!(TypeId::of::<fn(&dyn I)>());
f::<dyn I>();
}
trait I {}
pub fn f<T: ?Sized + 'static>() {
dbg!(TypeId::of::<&T>());
dbg!(TypeId::of::<fn(&T)>());
}
我的目标是能够在Any
对象中存储fn
个指针,以便稍后我可以向下投射它们.但这不起作用(大概是因为TypeId
不匹配).