4 个版本
0.1.3 | 2023 年 9 月 1 日 |
---|---|
0.1.2 | 2023 年 8 月 31 日 |
0.1.1 | 2023 年 8 月 30 日 |
0.1.0 | 2023 年 8 月 29 日 |
#2165 在 Rust 模式
5KB
50 行
as_base
此包允许直接访问类似 C++ 公共基类的 trait 对象内部的字段。不涉及虚拟调度,基类对象始终以与封装对象相同的地址开始。
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