如何简单地将 &dyn 特征转换为 usize?



有比下面更好的方法吗?

let a: Arc<dyn Send + Sync> = Arc::new(true);
println!(
"{}",
unsafe { std::mem::transmute::<_, (usize, usize)>(a.as_ref()) }.0,
);

如果当前不稳定的Rust功能是一个选项,那么#![feature(ptr_metadata)]允许您使用pointer::to_raw_parts在没有任何unsafe的情况下进行转换。

#![feature(ptr_metadata)]
use std::sync::Arc;
fn main() {
let a: Arc<dyn Send + Sync> = Arc::new(true);

let a_ptr: *const (dyn Send + Sync) = a.as_ref();
let data_ptr_only: *const () = a_ptr.to_raw_parts().0;
println!("{:p} {}", data_ptr_only, data_ptr_only as usize);
}

相关内容

  • 没有找到相关文章

最新更新