代码之家  ›  专栏  ›  技术社区  ›  Martijn Courteaux

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

  •  19
  • Martijn Courteaux  · 技术社区  · 15 年前

    我想用C++制作一个比特集。我做了一些研究。我找到的所有例子都是这样的:

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

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

    这不会编译。。。

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

    int size = getDependentSizeForBitset();
    myBitset = new bitset<size>();
    
    6 回复  |  直到 8 年前
        1
  •  27
  •   Stack Overflow is garbage    15 年前

    Boost有一个 dynamic_bitset

    或者,您可以使用 vector<bool>

        2
  •  7
  •   Thomas Jones-Low    15 年前
        3
  •  1
  •   graham.reeds    15 年前

    您应该检查boosts动态\u位集。

        4
  •  1
  •   AnT stands with Russia    15 年前

    似乎要创建一个大小不是编译时常量的位集。在这种情况下 bitset std::vector<bool> -在许多(如果不是所有)实现中,此模板专门用于实现 布尔值数组,其中每个元素占用一位(与 bool

        5
  •  0
  •   stinky472    15 年前

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

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

        6
  •  -4
  •   user10868477 user10868477    6 年前

    你可以把你的类变成一个模板来制作 std::bitset 在类被实例化之前,大小是不确定的。你可以这样做:

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

    那么要使用你的课程,你必须这样做:

    int exampleSize = 42;
    Test<exampleSize> name;
    
    推荐文章