使用变量设置位集的大小

时间:2016-12-02 18:16:57

标签: c++

我想知道如何使用变量来设置bitset的大小。例如,

// obtain file size:
fseek (rFile , 0 , SEEK_END);
numberOfBytes = ftell (rFile);
rewind (rFile);

const unsigned long long buffSize = numberOfBytes * 8;
std::bitset<buffSize> buffer;

我收到一条错误消息,指出buffSize的值在常量表达式中不可用。我正在寻找一种方法将bitset设置为我当前正在阅读的文件的大小。

3 个答案:

答案 0 :(得分:5)

无法做到。 std:bitset的大小是模板参数,因此它必须是编译时常量。

可以/可以起作用的一些选择是:

  1. 设置大小的上限,使用该大小的bitset,然后忽略额外的位。
  2. 切换到std::vector<bool>。这有一些警告,但提供与bitset大致类似的基本功能。
  3. 切换到Boost dynamic_bitset。这将允许您将大小指定为ctor的参数,而不是模板参数,因此它不需要是编译时常量。
  4. 当然,毫无疑问还有其他可能性。就个人而言,我的第一选择可能是Boost dynamic_bitset

答案 1 :(得分:3)

有两种不同类型的常量,编译时常量以及声明为const的所有其他常量。在你的代码中你有后者。即使它被声明为const,也会使用直到运行时才知道的数据进行初始化,因此它不是编译时常量。

需要使用编译时常量定义

std::bitset。由于您没有,编译器会给您一个错误。如果您需要在运行时定义的位集,我建议boost::dynamic_bitset

答案 2 :(得分:0)

您无法在编译时知道大小