Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Enums 我可以限制锈蚀枚举的大小吗?_Enums_Rust_Discriminated Union - Fatal编程技术网

Enums 我可以限制锈蚀枚举的大小吗?

Enums 我可以限制锈蚀枚举的大小吗?,enums,rust,discriminated-union,Enums,Rust,Discriminated Union,我的Rust程序中有一个枚举类型,其中一些变量可能包含内部数据 enum MyEnum { A, B(u64), C(SmallStruct), D(Box<LargeStruct>) } enum MyEnum{ A. B(u64), C(SmallStruct), D(方框) } 这个枚举将被存储数万次,内存使用是一个问题。我希望避免意外地为enum添加一个非常大的变量。有什么方法可以告诉编译器限制内存中枚举实例的大小吗?您可以使用并断言您的枚

我的Rust程序中有一个枚举类型,其中一些变量可能包含内部数据

enum MyEnum {
    A,
    B(u64),
    C(SmallStruct),
    D(Box<LargeStruct>)
}
enum MyEnum{
A.
B(u64),
C(SmallStruct),
D(方框)
}

这个枚举将被存储数万次,内存使用是一个问题。我希望避免意外地为enum添加一个非常大的变量。有什么方法可以告诉编译器限制内存中枚举实例的大小吗?

您可以使用并断言您的枚举小于或等于某个大小。

如另一个答案中所述,您可以使用
常量断言宏,但它需要一个外部板条箱。如果您正在寻找仅适用于std的解决方案,并且在断言失败时可以接受更难看的错误消息,那么可以使用以下()命令:

#[deny(const_err)]
常量fn常量断言(ok:bool){
0-!使用时正常;
}
//断言MyEnum不大于16字节

const\u ASSERT\u SMALL:()=const\u ASSERT(mem::size\u of:())运行clippy,它会告诉您。另请参阅。
#[deny(const_err)]
const fn const_assert(ok: bool) {
    0 - !ok as usize;
}

// assert that MyEnum is no larger than 16 bytes
const _ASSERT_SMALL: () = const_assert(mem::size_of::<MyEnum>() <= 16);