在初始化时定义位集大小?

我想在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。

    Interesting Posts