我正在尝试初始化一些可以为空的非可复制类型的固定大小的数组,就像Option<Box<Thing>>某种类型的那样Thing.我想把它们中的两个打包成一个没有任何额外间接的结构.我想写这样的东西:
let array: [Option<Box<Thing>>; SIZE] = [None; SIZE];
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为[e; n]语法要求e实现Copy.当然,我可以将它扩展为SIZE Nones,但是当SIZE它很大时,这可能是笨重的.我不相信这可以用没有非自然编码的宏来完成SIZE.有没有好办法呢?
是的,这很容易unsafe; 没有办法unsafe吗?
在Rust中填充结构向量的好方法是:
理想情况下
unsafeC等价物是:
struct MyStruct *create_mystruct(const uint n) {
struct MyStruct *vector = malloc(sizeof(*vector) * n);
for (uint i = 0; i < n; i++) {
/* any kind of initialization */
initialize_mystruct(&vector[i], i);
}
return vector;
}
Run Code Online (Sandbox Code Playgroud)
我正在移植一些C代码,它在一个简单的循环中填充一个数组,所以我想知道是否有一种乡村方式来执行这样一个零或至少最小开销的常见任务?
如果此代码的Rust版本通常需要一些额外的检查,那么最近的等价物是什么?