有比下面更好的方法吗?
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);
}