#trait-object #slice #type #vtable #meta

nightly metatype

辅助方法以确定类型是否为 TraitObjectSliceConcrete,并分别与之交互

5 个版本

0.2.1 2021 年 7 月 10 日
0.2.0 2019 年 10 月 18 日
0.1.2 2019 年 7 月 23 日
0.1.1 2018 年 7 月 20 日
0.1.0 2018 年 7 月 20 日

#1608Rust 模式

Download history 117/week @ 2024-03-24 188/week @ 2024-03-31 87/week @ 2024-04-07 121/week @ 2024-04-14 123/week @ 2024-04-21 122/week @ 2024-04-28 105/week @ 2024-05-05 110/week @ 2024-05-12 161/week @ 2024-05-19 172/week @ 2024-05-26 156/week @ 2024-06-02 85/week @ 2024-06-09 124/week @ 2024-06-16 106/week @ 2024-06-23 53/week @ 2024-06-30 36/week @ 2024-07-07

330 每月下载量
用于 11 包(2 个直接使用)

MIT/Apache 许可证

15KB
255

metatype

Crates.io MIT / Apache 2.0 licensed Build Status

📖 文档 | 💬 聊天

辅助方法以确定类型是否为 TraitObjectSliceConcrete,并分别与之交互。

示例

assert_eq!(usize::METATYPE, MetaType::Concrete);
assert_eq!(any::Any::METATYPE, MetaType::TraitObject);
assert_eq!(<[u8]>::METATYPE, MetaType::Slice);

let a: Box<usize> = Box::new(123);
assert_eq!(Type::meta_type(&*a), MetaType::Concrete);
let a: Box<dyn any::Any> = a;
assert_eq!(Type::meta_type(&*a), MetaType::TraitObject);

let a = [123,456];
assert_eq!(Type::meta_type(&a), MetaType::Concrete);
let a: &[i32] = &a;
assert_eq!(Type::meta_type(a), MetaType::Slice);

let a: Box<dyn any::Any> = Box::new(123);
let meta: TraitObject = type_coerce(Type::meta(&*a));
println!("vtable: {:?}", meta.vtable);

注意

当前需要 Rust nightly 版本以使用 rawspecializationarbitrary_self_types 功能。

许可证

根据以下任一许可证授权:

供您选择。

除非您明确说明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何附加条款或条件。

无运行时依赖