作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Rust 程序中有一个枚举类型,其中一些变体可能包含内部数据。
enum MyEnum {
A,
B(u64),
C(SmallStruct),
D(Box<LargeStruct>)
}
这个枚举将被存储数万次,内存使用是一个问题。我想避免不小心为枚举添加一个非常大的变体。有没有一种方法可以告诉编译器限制内存中枚举实例的大小?
最佳答案
从 Rust 1.57 开始,您可以在 const 上下文中使用断言,因此这种检查将起作用:
// assert that MyEnum is no larger than 16 bytes
const _ASSERT_SMALL: () = const_assert(mem::size_of::<MyEnum>() <= 16);
遵循原始答案以供历史引用。
如其他答案所述,您可以使用 const_assert!
宏,但它将需要一个外部包装箱,static_assertions
.如果您正在寻找一个 std-only 解决方案并且可以在断言失败时忍受更丑陋的错误消息,您可以使用这个:
#[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);
您可以在 the article 中阅读有关此技术及其改进方法的信息由 static_assertions
包的作者编写。
编辑:原始文章的链接无效,web archive version
关于enums - 我可以限制 Rust 枚举的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62547749/
我是一名优秀的程序员,十分优秀!