I would like to implement this C code which uses a flexible array member (sometimes called the struct hack) in Rust:
struct test {
int key;
int dataSize;
int data[];
};
struct test* t = malloc(sizeof(struct test) + sizeOfData)
The empty array at the end of structure allows you to allocate your meta fields and data all at once. Unfortunately, I can't figure out how to do such thing in Rust.
The Rust equivalent of this struct would use a slice:
struct test {
key: i32,
dataSize: i32,
data: [i32],
}
however, these types are not really convenient to use at the moment as there is no safe way to construct them.
A more practical way to do this is to use a generic:
struct test<T: ?Sized> {
key: i32,
dataSize: i32,
data: T,
}
and then to make sure that you only use test
when T
is an array or a slice (which you could only create through coercion).
See also:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With