rust - 如何在不实例化的情况下在 Rust 中获取结构字段的大小
问题描述
我有一个包含字节数组的结构。这个结构实际上来自于 bindgen 产生的 FFI 绑定,它的大小是在 C 代码中使用宏定义的,即:
C代码:
#define FOO_SIZE 100
struct the_struct
{
char foo[FOO_SIZE];
/* other fields... */
};
生成的 FFI 绑定:
pub struct the_struct {
pub foo: [::std::os::raw::c_char; 100usize],
// other fields...
}
我想确保来自 Rust API 端的数据适合foo
. 我也不想FOO_SIZE
在我的 Rust API 中硬编码,因为它可能会发生变化。
我知道这可以通过首先实例化 struct 来完成,但话又说回来,这需要显式初始化foo
,如果不知道它的大小,这似乎是不可能的。此外,这是我想避免的额外步骤。
是否有可能在不实例化结构的情况下以某种方式获得foo
静态的大小?如果没有,最好的方法是什么?更改 C 代码不是一种选择。
解决方案
我不知道是否有可能获得数组大小,但如果你没有太多这样的结构并且大小不会经常改变,我会明确声明这个值:
pub const FOO_SIZE: usize = 100;
然后声明一个如果硬编码常量错误将无法编译的函数:
fn _assert_foo_size(s: &mut the_struct) {
s.foo = [0; FOO_SIZE];
}
推荐阅读
- javascript - 如何根据我创建和填写的容器的 ID 制作 JSON 对象
- c# - 无法以编程方式设置组合框选择
- opengl-es-2.0 - 如何使用 OpenGL ES 2.0 为单个像素着色?
- tfs - TFS 2017 构建从
- android - 分片交易重复
- c++ - Why fstream is not inherited from ifstream and ofstream in c++?
- inheritance - 如何继承 odoo v8 上的 _constraints?
- regex - 在开始和结束模式之间保留字符串
- azure-iot-sdk - 注册组下的自动配置设备不起作用(java SDK)
- qt - Qml - qml 中的 C++ 信号参数“未定义”