Rust 我能安全地投下盒子吗<;dyn Any+;发送>;包装盒<;dyn Any>;?

Rust 我能安全地投下盒子吗<;dyn Any+;发送>;包装盒<;dyn Any>;?,rust,unsafe,Rust,Unsafe,Send是一种标记特征,对内存布局没有任何影响。也就是说,Any类型的机制对我来说仍然有点神秘 以下代码是否正确,是否符合我的要求:浇筑类型将始终正确向下浇筑到原始混凝土类型: 让我拥有:Box=Box::new(69); 让ptr=Box::进入原始(我所拥有的); 让我想要什么:Box=safe{Box::from_raw(ptr as*mut dyn Any)}; 我一直在玩这个,它“似乎工作得很好”。是吗 作为一个额外的问题,我可以在没有不安全块的情况下执行此操作吗?是的,您可以通过分

Send
是一种标记特征,对内存布局没有任何影响。也就是说,
Any
类型的机制对我来说仍然有点神秘

以下代码是否正确,是否符合我的要求:浇筑类型将始终正确向下浇筑到原始混凝土类型:

让我拥有:Box=Box::new(69);
让ptr=Box::进入原始(我所拥有的);
让我想要什么:Box=safe{Box::from_raw(ptr as*mut dyn Any)};
我一直在玩这个,它“似乎工作得很好”。是吗


作为一个额外的问题,我可以在没有
不安全
块的情况下执行此操作吗?

是的,您可以通过分配值安全地执行此操作:

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;
}
使用std::any::any;
fn main(){
让我拥有的东西:Box=Box::new(69);
让我想要什么:盒子=我拥有什么;
}
另见:


太好了,谢谢,出于某种原因,我认为演员必须“在”盒子里进行?@cmyr我认为这是一个让这种强制生效的魔术。是的。我一直在努力寻找合理的链接,讨论这种特质,并将其添加到“请参阅”中