我想在Rust中使用灵活的数组成员(有时称为struct hack)来实现这个C代码:
struct test {
int key;
int dataSize;
int data[];
};
Run Code Online (Sandbox Code Playgroud)
struct test* t = malloc(sizeof(struct test) + sizeOfData)
Run Code Online (Sandbox Code Playgroud)
结构末尾的空数组允许您一次性分配元字段和数据.不幸的是,我无法弄清楚如何在Rust中做这样的事情.
该结构的 Rust 等效项将使用切片:
struct test {
key: i32,
dataSize: i32,
data: [i32],
}
Run Code Online (Sandbox Code Playgroud)
然而,这些类型目前使用起来并不方便,因为没有安全的方法来构造它们。
更实用的方法是使用泛型:
struct test<T: ?Sized> {
key: i32,
dataSize: i32,
data: T,
}
Run Code Online (Sandbox Code Playgroud)
然后确保仅在 是 数组或切片test时使用T(只能通过强制创建)。
也可以看看: