2个版本

0.1.1 2023年8月30日
0.1.0 2023年8月29日

#48#dispatch


as_base 中使用

MIT/Apache

5KB
80

as_base

该软件包允许直接访问类似于C++公共基类的特质对象的字段。不涉及虚函数调度,基对象总是从与封装对象相同的地址开始。

use as_base::*;

struct BaseType {
    x: u64,
}

trait MyTrait: AsBase<BaseType> {}

#[derive(AsBase)]
#[repr(C)]
struct Implementor {
    pub base: BaseType,
}

impl MyTrait for Implementor {}

fn main() {
    let x = Implementor {
        base: BaseType { x: 42 },
    };
    let dyn_reference = &x as &dyn MyTrait;
    assert_eq!(dyn_reference.as_base().x, 42)
}

依赖项

~3MB
~57K SLoC