在初始化时定义位集大小?
我想在C ++中做一些小事。 我做了一些研究。 所有的例子,我发现这样的地方:
bitset<6> myBitset; // do something with it
但是当我在我的类中定义variables时,我不知道bitset的大小:
#include <bitset> class Test { public: std::bitset *myBitset; }
这不会编译…
像这样初始化也不起作用:
int size = getDependentSizeForBitset(); myBitset = new bitset<size>();
Boost有一个你可以使用的dynamic_bitset
。
或者,你可以使用一个vector<bool>
,它(不幸的是)专门用来作为一个bitset。 这造成了很多混乱,一般来说被认为是一个坏主意。 但是这就是它的工作原理,所以如果这是你所需要的,那么我想你也可以使用它。
使用Boost :: dynamic_bitset
你应该检查boosts dynamic_bitset。
你刚才说的是不正确的。 “你find的例子”看起来不像你张贴。 使用非常量值来参数化模板是不可能的。 所以,你的第一个例子是无效的。 只有常量expression式可以作为模板的非types参数。 即非types参数必须是编译时常量。
看起来你想创build一个大小不是编译时常量的bitset。 在这种情况下, bitset
模板是没有问题的。 您需要实现运行时大小的位集。 例如,你可以在很多(如果不是全部)实现中使用std::vector<bool>
,这个模板专门用于实现布尔值的打包数组,每个元素占用一个位(而不是一个bool
对象)。
bitset需要大小作为模板参数,这意味着大小必须能够在编译时确定。 它不能基于运行时条件,如用户input。
为此,您应该查看std :: vector或boost :: dynamic_bitset。 std :: vector是一个专门的模板实例,每个元素使用一个位。 不像bitset,它可以dynamicresize。