#proc-macro #dynamic #inheritance #field #dynamic-object #subclass

dynamic-object-derive

为crate dynamic-object提供过程宏

3个版本

0.1.2 2022年9月4日
0.1.1 2022年9月1日
0.1.0 2022年9月1日

#21#继承


dynamic-object 中使用

MIT 许可证

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