rust raw pointer使用方法(4)
来源:互联网 发布:linux系统网络邻居 编辑:程序博客网 时间:2024/06/05 23:50
4、这儿是继续上一篇往下写,上一篇是把*mut c_void指针转成*mut T类型,然后用UFCS来调用,今天是把*mut c_void转成*mut Self来使用,这个其实只需要添加:Sized就可以了,具体代码如下:
use std::os::raw::{c_void};//注意这儿必须加Sized,不然p_this转*mut Self编译器会报错,这儿感谢rust 2群里的@ELTONtrait Foo:Sized{ fn say(p_this:*mut c_void){ let p_self = p_this as *mut Self; unsafe {(&*p_self).print(10);} //p_self和p_this都是指针的大小 println!("{},{}",std::mem::size_of_val(&p_self),std::mem::size_of_val(&p_this)); //只能引用当前trait里的method,function或者继承来的,但是不能使用这个类型自己的method和function //这儿还是很好理解的,毕竟Self是一定实现了print,却不一定会实现print2(虽然Bar实现了print2,但却不能推导出所有实现了trait Foo的都有print2 //unsafe {(&*p_self).print2(100);} } fn print(&self,i:i32){ println!("hello {}",i); }}struct Bar;impl Bar{ fn print2(&self,i:i32){ println!("hi {}",i); }}impl Foo for Bar{}fn main(){ let mut b = Bar; let p_this = &mut b as *mut Bar; Bar::say(p_this as *mut c_void);}
Play地址:http://is.gd/COhSOu
运行结果:
hello 108,8
0 0
- rust raw pointer使用方法(4)
- rust raw pointer使用方法(1)
- rust raw pointer使用方法(2)
- rust raw pointer使用方法(3)
- Rust : Pointer......to be continued
- rust compile plugin的使用方法
- Rust中文翻译4
- rust
- shared_ptr和intrusive_ptr的对比差别 RAW POINTER
- Rust - Reference counted and raw pointers | 引用计数和原始指针
- pointer
- Pointer
- RAW
- Rust:Programming Rust:所有权
- float (pointer)[4]和float pointer[4]的区别
- 安装Rust
- rust language
- Rust 关键字
- iOS下的通知使用
- logstash,elasticsearch,kibana三件套安装
- Andriod 安全之Windows下CTS自动化测试环境的搭建
- Activiti工作流入门讲解及activiti环境搭建,自动建表(一)
- 【Android】android开发中adb devices检测不到设备,ADT对应.android文件夹找不到adb_usb.ini
- rust raw pointer使用方法(4)
- Linux 系统双网卡实现内网端口转发
- SSH问题(五)java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
- 树莓派指示灯
- Unity优化大全(四)之CPU-GC(内存回收)和Sricpt
- 当使用Gralde编译出现某jar包或库重复依赖的各种解决方案
- terminal无法设置透明背景解决方案- ubuntu14.04 降级 gnome-terminal至3.6.2
- zookeeper集群配置
- WTL框架小结