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

rust笔记11:虚拟方法表VTable 和 dyn

理解 Rust 中的 虚拟方法表(VTable)dyn 的关键在于明确它们的用途和适用场景。为了更清晰地解释,我们从问题的根源出发:为什么需要动态分发? 以及 在什么场景下需要用到 VTable 和 dyn


1. 为什么需要 VTable 和 dyn

Rust 默认使用 静态分发(Static Dispatch),即在编译时确定调用哪个方法。这种方式效率高,但有一个限制:必须在编译时知道具体的类型。然而,在某些场景下,我们无法在编译时确定具体类型,而是需要在运行时根据条件决定调用哪个方法。这时就需要 动态分发(Dynamic Dispatch),而 VTable 和 dyn 就是实现动态分发的工具。

静态分发的局限性

以下是一个静态分发的例子:

trait Animal {
   
    fn speak(&self);
}

struct Dog;
impl Animal for Dog {
   
    fn speak(&self) {
   
        println!("Woof!");
    }
}

struct Cat;
impl Animal for Cat {
   
    fn speak(&self) {
   
        println!("Meow!");
    }
}

fn make_animal_speak<T: Animal>(animal: &T) {
   
    animal.speak(); // 静态分发:编译时确定调用哪个方法
}

fn main(

相关文章:

  • LC109. 有序链表转换平衡二叉搜索树
  • 【操作系统】设备管理
  • 多机多卡训练和单机多卡训练速度对比
  • VTP协议故障排除——三层交换机
  • MySQL零基础教程15—简单的表连接(join)
  • Windows系统还原详解
  • 51单片机使用DS18B20温度传感器
  • day27 第八章 贪心算法 part01
  • 深度学习R8周:RNN实现阿尔兹海默症(pytorch)
  • 补丁供应链案例:CVE-2024-7254. Protobuf. Google
  • FastGPT 引申:知识库辅助开发(代码符号自动提取与文件匹配工具详解)
  • FastGPT 引申:如何基于 LLM 判断知识库的好坏
  • cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼
  • 51c自动驾驶~合集53
  • 从建筑设计到施工工具:软件体系结构与框架的协同之道
  • el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
  • RK3568平台(GPIO篇)libgpiod的使用
  • 为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心
  • AI学习笔记:LM studio大模型加载参数说明
  • Hutool一个类型转换工具类 `Convert`,
  • 济南市高新技术官方网站开发区/简述seo和sem的区别与联系
  • 网站链接维护怎么做/网络推广公司排行榜
  • 网站数据比较/百度推广一个月多少钱
  • 汽车建设网站的能力/seo资源网站排名
  • 什么行业需要做网站和推广/佛山做网站推广的公司
  • 盐城网站建设推广优化/seo推广方式是什么呢