5 个版本
0.2.0 | 2022年3月13日 |
---|---|
0.1.3 | 2022年3月13日 |
0.1.2 | 2022年3月13日 |
0.1.1 | 2022年3月13日 |
0.1.0 | 2022年3月13日 |
#9 in #casting
每月下载 26 次
在 2 个crate中使用 (通过 trait-bound-typemap)
18KB
357 行
多特性对象
此crate提供了一个指针类型,允许将该类型注册的所有特性进行转换。这是通过将每个特性实现的v-table指针和数据指针存储在类型上来实现的。
安全性
根据我的理解,所有不安全的部分都是完全安全的。由于这个crate还处于早期阶段,可能存在一些尚未注意到的副作用。
使用方法
use multi_trait_object::*;
use std::fmt::Debug;
#[derive(Debug)]
struct MyStruct {
a: u64,
}
trait MyTrait {}
trait MyOtherTrait {}
impl MyTrait for MyStruct{}
impl MyOtherTrait for MyStruct {}
impl_trait_object!(MyStruct, dyn MyTrait, dyn MyOtherTrait, dyn Debug);
fn main() {
let obj = MyStruct {
a: 5
};
let mto = obj.into_multitrait();
{
let debug = mto.downcast_trait::<dyn Debug>().unwrap();
println!("{:?}", debug);
let my_trait = mto.downcast_trait::<dyn MyTrait>().unwrap();
}
let trait_box: Box<dyn MyTrait> = mto.downcast_trait_boxed::<dyn MyTrait>().unwrap();
}
许可证
Apache-2.0