3个版本
0.1.2 | 2022年9月4日 |
---|---|
0.1.1 | 2022年9月1日 |
0.1.0 | 2022年9月1日 |
#21 在 #继承
在 dynamic-object 中使用
6KB
116 代码行
Dynamic-rs
Rust中的继承
此库通过LLVM风格的RTTI提供运行时类型信息,用于动态转换(向上转换/向下转换)
用法
#[subclass(DynamicObjectBase)]
struct Class {
value: u32,
foo: u32
}
#[subclass(Class, parent)]
struct Derived {
field: u32,
parent: Class,
}
let object = Derived {
parent: Class {
value: 548389,
foo: 72840548
},
field: 2153746,
};
let object = Object::<Derived>::new(Box::new(object));
assert!(object.field == 2153746);
assert!(object.parent.value == 548389);
assert!(object.parent.foo == 72840548);
// Downcast
let object = object.cast::<Class>();
assert!(object.value == 548389);
assert!(object.foo == 72840548);
// Upcast
let object = object.cast::<Derived>();
assert!(object.field == 2153746);
assert!(object.parent.value == 548389);
assert!(object.parent.foo == 72840548);
使用虚方法
// Set second generic argument to your trait
type MyObject = Object<MyClass, Box<dyn MyTrait>>
// And access the vtable by
object.vtable().method();
// Or
object.vtable_mut().method();
lib.rs
:
为crate dynamic_object提供 derive
依赖
~1.5MB
~39K SLoC