在 Rust 中,trait 对象 是一种实现动态分发(dynamic dispatch)的机制,允许你在运行时处理实现了某个 trait 的不同类型。Trait 对象是 Rust 中实现多态性的重要工具之一,特别是在需要处理多种类型但又不确定具体类型的情况下。
在有继承的语言中,可以通过类继承实现多态,rust没有继承,trait对象便是为了完成类似特性。
1. 什么是 Trait 对象?
Trait 对象是一个指向实现了某个 trait 的类型的指针,它由两部分组成:
- 数据指针:指向具体类型的实例。
- 虚表指针(vtable):指向 trait 方法的函数指针表。
Trait 对象的类型通常表示为 dyn Trait
,例如 &dyn Trait
或 Box<dyn Trait>
。
示例:Trait 对象
trait Speak {fn speak(&self);
}struct Dog;
struct Cat;impl Speak for Dog {fn speak(&self) {println!("Woof!");}
}impl Speak for Cat {fn speak(&self) {println!("Meow!");}
}fn main() {let dog