我希望在D编程语言中为可变大小的数组创建一个固定大小的struct头。在“C”中,可以将零长度或空括号数组作为固定struct头中声明的最后一项,并且然后调整对Malloc的调用,以包括数据结构的可变大小部分所需的额外存储,该第一个元素将由最后一个声明引用。
但是在D语言中,Array是一个更高级的对象,并且当我试图构建一组结构化的Opcode字符串时,我真的想表达一个带有尾随内存引用的复合结构作为它的最终项(后面的数组的第一个元素..
使用D编程语言时,如何声明/创建/使用复合变长内存结构?
答案 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的静态数组,但不允许使用空格 分配给它。它作为可变长度的最后一个成员很有用 结构,或作为模板扩展的退化情况。