在初始化时定义bitset大小?

时间:2010-06-28 17:37:07

标签: c++ bitset

我想在C ++中做一个bitset。我做了一些研究。我发现的所有例子都是这样的:

bitset<6> myBitset;
// do something with it

但是当我在我的类中定义变量时,我不知道bitset的大小:

#include <bitset>
class Test
{
public:
     std::bitset *myBitset;
}

这不会编译......

像这样初始化也不起作用:

int size = getDependentSizeForBitset();
myBitset = new bitset<size>();

6 个答案:

答案 0 :(得分:22)

Boost有dynamic_bitset你可以使用。

或者,您可以使用vector<bool>,其中(不幸的是)专门用作bitset。这会引起很多混乱,一般来说被认为是个坏主意。但这就是它的工作方式,所以如果这就是你所需要的,你可能也会使用它,我想。

答案 1 :(得分:6)

答案 2 :(得分:1)

你应该看一下boosts dynamic_bitset。

答案 3 :(得分:1)

你在开头说的不是真的。您发现的“示例”看起来并不像您发布的那样。使用非常量值来参数化模板是不可能的。所以,你的第一个例子是无效的。只有常量表达式可以作为模板的非类型参数。即非类型参数必须是编译时常量。

看起来你想要创建一个大小不是编译时常量的bitset。在这种情况下,bitset模板是不可能的。您需要实现运行时大小的bitset。例如,您可以使用std::vector<bool> - 在许多(如果不是全部)实现中,此模板专门用于实现布尔值的压缩数组,其中每个元素占用一位(相对于一个bool对象)。

答案 4 :(得分:0)

bitset需要size作为模板参数,这意味着必须能够在编译时确定大小。它不能基于运行时条件,如用户输入。

为此,您应该查看std :: vector或boost :: dynamic_bitset。 std :: vector是一个专用的模板实例,每个元素使用一位。与bitset不同,它可以动态调整大小。

答案 5 :(得分:-2)

您可以将您的班级设为模板,以使std::bitset的大小不确定,直到实例化您的班级为止。您可以这样做:

#include <bitset>

template<int size>
class Test
{
public: 
    std::bitset<size> bitset;
    //...
}

然后使用您的课程,您将必须执行以下操作:

int exampleSize = 42;
Test<exampleSize> name;