#枚举 # #变体 #指针 #零成本 #地址 #字段

addr_of_enum

使用稳定Rust获取枚举项中的字段地址

6个版本

0.1.5 2024年2月12日
0.1.4 2024年1月10日

#243内存管理

44 每月下载量
fast_enum_conversion 中使用

MIT 许可证

5KB
71 代码行

addr_of_enum

此crate提供了#[derive(AddrOfEnum)]addr_of_enum!宏,以获取指定变体的字段指针,而不创建中间引用。它的工作方式类似于std::ptr::addr_of!,但仅适用于枚举。

此宏是零成本的,这意味着在发布模式下它以最小成本进行计算。

它还适用于具有未居住类型的变量。

示例

# use addr_of_enum::{addr_of_enum, AddrOfEnum};

#[derive(AddrOfEnum)]
#[repr(C)]
enum MyEnum {
    E1(usize, u8),
    E2 {
        item1: u32,
        item2: u8,
    }
}

let e = MyEnum::E1(1, 2);
let _: *const usize = addr_of_enum!(&e, E1, 0);
let _: *const u32 = addr_of_enum!(&e, E2, item1);

限制

目前,这些宏不能在const上下文中使用。

依赖关系

~1.5MB
~37K SLoC