我想知道如何使用变量来设置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设置为我当前正在阅读的文件的大小。
答案 0 :(得分:5)
无法做到。 std:bitset
的大小是模板参数,因此它必须是编译时常量。
可以/可以起作用的一些选择是:
bitset
,然后忽略额外的位。std::vector<bool>
。这有一些警告,但提供与bitset
大致类似的基本功能。dynamic_bitset
。这将允许您将大小指定为ctor的参数,而不是模板参数,因此它不需要是编译时常量。当然,毫无疑问还有其他可能性。就个人而言,我的第一选择可能是Boost dynamic_bitset
。
答案 1 :(得分:3)
有两种不同类型的常量,编译时常量以及声明为const
的所有其他常量。在你的代码中你有后者。即使它被声明为const
,也会使用直到运行时才知道的数据进行初始化,因此它不是编译时常量。
std::bitset
。由于您没有,编译器会给您一个错误。如果您需要在运行时定义的位集,我建议boost::dynamic_bitset
。
答案 2 :(得分:0)
您无法在编译时知道大小