当前位置: 首页 > news >正文

Rust : 关于*const () 与type erase

*const () 可以替代泛型,更加灵活。

一、 代码

struct Foo(String);impl Work for Foo {fn process(&self) {println!("process work  from Foo :  {}", self.0);}
}
struct Bar(String);
impl Work for Bar {fn process(&self) {println!("process work  from Bar : {}", self.0);}
}
fn fn_foo(foo: &Foo){println!("call fn_foo, output ->{}", foo.0);
}
fn fn_bar(bar: &Bar){println!("call fn_bar, output ->{}", bar.0);
}
fn main() {let foo = Foo("foo".into());let bar = Bar("bar".into());let unsafe_fn_foo: unsafe fn(*const ()) = unsafe {std::mem::transmute(fn_foo as fn(&Foo))};process_method::<Foo>( unsafe_fn_foo,&foo,);let unsafe_fn_bar: unsafe fn(*const ()) = unsafe {std::mem::transmute(fn_bar as fn(&Bar))};process_method::<Bar>(unsafe_fn_bar,&bar,);let foo_ptr: *const () = &foo as *const Foo as _;let bar_ptr: *const () = &bar as *const Bar as _;process_data::<Foo>(foo_ptr);process_data::<Bar>(bar_ptr);
}
trait Work {fn process(&self);
}
// 泛型化数据
fn process_data<T: Work>(data: *const ()) {let obj: *const T = data.cast::<T>();unsafe{(*obj).process()};
}
// 泛型化函数
fn process_method<T>(f:  unsafe fn(*const ()),data:&T) {let ptr: *const () = data as *const T as _;unsafe{f(ptr)};
}

二、输出结果

PS D:\my_program\type_erase> cargo run --releaseFinished `release` profile [optimized] target(s) in 0.02sRunning `target\release\type_erase.exe`
call fn_foo, output ->foo    
call fn_bar, output ->bar    
process work  from Foo :  foo
process work  from Bar : bar 

相关文章:

  • 算法-同余原理
  • 《MySQL下载安装:Linux下载MySQL 5.7版本》
  • 镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆
  • 每天学一个 Linux 命令(18):mv
  • Qt实现文件传输服务器端(图文详解+代码详细注释)
  • tar压缩
  • 大语言模型
  • centosu7 二进制安装mysql5.7
  • Linux——消息队列
  • Spring Boot集成MinIO的详细步骤
  • 避坑,app 播放器media:MediaElement paly报错
  • 子函数嵌套的意义——以“颜色排序”为例(Python)
  • css 中float属性及clear的释疑
  • 小白如何从0学习CSS
  • Spark-SQL与Hive的连接及数据处理全解析
  • 关于STM32创建工程文件启动文件选择
  • 服务器带宽问题,以及服务器的上传下载速度,异常卡顿等
  • 通过建模和仿真进行高速连接器设计
  • 绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力【2】
  • SDK游戏盾ip可以破解吗
  • 用wordpress还是php/seo招聘要求
  • 外贸英文网站建设/下列哪些店铺适合交换友情链接
  • 网站建设推广岗位/关键词挖掘机爱站网
  • 图案设计网/seo技术好的培训机构
  • 百度免费网站建设/关键词指数
  • 微网站平台微网站建设方案/seo优化交流