【发布时间】:2020-11-04 02:33:49
【问题描述】:
如果我在下面的代码中创建Concrete1 类型的c1,是否有任何运行时开销?
pub trait ExampleTrait {
fn foo(&self);
}
pub struct Concrete1 {}
impl ExampleTrait for Concrete1 {
fn foo(&self) {}
}
pub struct Concrete2 {}
impl ExampleTrait for Concrete2 {
fn foo(&self) {}
}
fn main() {
let c1 = Concrete1 {};
c1.foo();
}
这是否需要任何类型的 v-table 查找或任何其他类型的开销?我想要一个 trait,这样我就可以在编译时强制 Concrete1 和 Concrete2 实现相同的方法集。
我将静态选择在主程序中使用哪种具体类型;这两个实现的存在只是为了在需要时我可以使用该 trait 的替代实现。
【问题讨论】:
-
没有。动态调度只有performed by trait objects。
标签: rust traits dynamic-dispatch static-dispatch