如何为可变大小的数组创建固定的struct头

时间:2012-03-12 23:54:42

标签: arrays string struct d

我希望在D编程语言中为可变大小的数组创建一个固定大小的struct头。在“C”中,可以将零长度或空括号数组作为固定struct头中声明的最后一项,并且然后调整对Malloc的调用,以包括数据结构的可变大小部分所需的额外存储,该第一个元素将由最后一个声明引用。

但是在D语言中,Array是一个更高级的对象,并且当我试图构建一组结构化的Opcode字符串时,我真的想表达一个带有尾随内存引用的复合结构作为它的最终项(后面的数组的第一个元素..

使用D编程语言时,如何声明/创建/使用复合变长内存结构?

1 个答案:

答案 0 :(得分:6)

与c

完全相同
struct VarArray(T){
uint length;
T[0] t;

static VarArray!T* allocate(T)(uint length){
VarArray!T* ret = enforce(malloc((VarArray!T).sizeof+T.sizeof*length));
*ret.length=length;
return ret;
}

}

检查http://dlang.org/arrays.html#static-arrays

  

允许使用维度为0的静态数组,但不允许使用空格   分配给它。它作为可变长度的最后一个成员很有用   结构,或作为模板扩展的退化情况。