D中的固定大小位数组

D中的固定大小位数组,d,bitarray,compile-time-constant,bitvector,D,Bitarray,Compile Time Constant,Bitvector,如果我想要一个编译时大小的位数组(在堆栈上),我的替代方案是什么 我在想 struct Bitset(size_t nBits) { enum wsz = 8 * size_t.sizeof; // Word-Size. enum nBlocks = nBits/wsz + nBits % wsz * wsz; alias _bits this; size_t[nBlocks] _bits; } 以及bt和core.bitop 会适合我的需要 有没有人已经为此编

如果我想要一个编译时大小的位数组(在堆栈上),我的替代方案是什么

我在想

struct Bitset(size_t nBits) {
    enum wsz = 8 * size_t.sizeof; // Word-Size.
    enum nBlocks = nBits/wsz + nBits % wsz * wsz;
    alias _bits this;
    size_t[nBlocks] _bits;
}
以及
bt
core.bitop

会适合我的需要

有没有人已经为此编写了一个模板以及一些漂亮的布尔运算?

我只需检查一下是否使用了堆栈。如果没有,获取源代码并修改它


IMHO BitArray可以通过某种选项进行改进,无论您是否希望它出现在堆栈上……

可能有您需要编辑的内容:我认为它不会出现在堆栈上……不过,我想到的另一件事是复制/粘贴bitmanip结构(如果它看起来像您需要的)并用静态阵列替换动态阵列背板。不应该有太大的改动,尽管我还没有真正尝试过。@AdamD.Ruppe:我就是这么做的。我花了大约半个小时将BitArray转换为静态大小的位集,并使UnitTests通过。@AdamD.Ruppe:一个问题。为什么
BitArray
只包含
init
成员而不包含构造函数?看起来这是尚未完全更新的D1 std.BitArray的端口(它仍然使用老式的运算符重载)。D1没有结构构造函数,所以必须使用init方法。(是的,肯定是一个端口,请参阅我对您的另一个问题的回答,其中也有到旧文档+源的链接)是的,同意。这就是D的用途…自适应:)