Send
是标记特征,对内存布局没有任何影响。也就是说,Any
类型的机制对我来说仍然有点神秘。
下面的代码是声音,并且可以执行我想要的操作:强制转换类型始终正确地转换为原始的具体类型:
let what_i_have: Box<dyn Any + Send> = Box::new(69);
let ptr = Box::into_raw(what_i_have);
let what_i_want: Box<dyn Any> = unsafe { Box::from_raw(ptr as *mut dyn Any) };
我已经试过了,它“似乎工作正常”。是吗?
作为奖励问题,我可以在没有unsafe
块的情况下进行此操作吗?
答案 0 :(得分:3)
是的,您可以通过分配值来安全地执行此操作:
use std::any::Any;
fn main() {
let what_i_have: Box<dyn Any + Send> = Box::new(69);
let what_i_want: Box<dyn Any> = what_i_have;
}
另请参阅: