【问题标题】:Do Rust traits have runtime overhead?Rust 特征有运行时开销吗?
【发布时间】: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,这样我就可以在编译时强制 Concrete1Concrete2 实现相同的方法集。

我将静态选择在主程序中使用哪种具体类型;这两个实现的存在只是为了在需要时我可以使用该 trait 的替代实现。

【问题讨论】:

标签: rust traits dynamic-dispatch static-dispatch


【解决方案1】:

如果具体类型是静态已知的,则使用静态调度。

如果具体类型未知(即特征对象:&dyn ExampleTrait),则使用动态调度。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2022-08-03
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-11-25
    相关资源
    最近更新 更多