使用变量设置bitset的大小

Use a variable to set the size of a bitset

本文关键字:bitset 设置 变量      更新时间:2023-10-16

我想知道如何使用变量设置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设置为当前正在阅读的文件的大小的方法。

无法完成。std:bitset的大小是模板参数,因此必须是编译时常数。

可以/可以工作的一些选择是:

  1. 在大小上设置上限,使用该大小的bitset,然后忽略多余的位。
  2. 切换到std::vector<bool>。这有警告,但提供了与bitset的大致相似的基本功能。
  3. 切换到Boost dynamic_bitset。这将使您将大小指定为CTOR的参数,而不是模板参数,因此它不需要是编译时常数。

当然还有其他可能性。就个人而言,我的首选可能是Boost dynamic_bitset

有两种不同类型的常数,编译时间常数以及声明为 const的所有其他类型。在您的代码中,您有后者。即使将其称为const是用直到运行时间才知道的数据,因此它不是编译时间常数。

std::bitset需要通过编译时间常数来定义。由于您没有一个编译器会给您带来错误。如果您需要在运行时定义的斑点,我建议boost::dynamic_bitset

您不能,需要在编译时间

知道大小