我有一些位字段标志状态的uint32变量和这些标志的枚举。此变量通过值作为参数传递给某些函数。
我需要再添加约20个标志。我最好的选择是什么?扩展到64位还是将其视为2个32位的数组?
扩展到64位将导致我使用编译器“扩展”,因为enum为32位宽。但是使用数组似乎会导致更多工作。
我的代码在32位和64位编译器上编译,并在Windows,Linux和Mac上运行。
提前致谢。
最佳答案
我将使用STL位集。然后,我的枚举不必一定是2的幂。使用常规枚举,它只是位集中的索引。您也可以使用vector<bool>
。
主要好处是可移植性,因为您的标志集现在可以适合任何平台的常规枚举范围。
例:
enum errorFlags { parity, framing, overrun, errorFlags_size };
std::bitset<errorFlags_size> flagSet;
. . .
// either of these set framing error condition
flagSet[framing] = true;
flagset.set(framing);
// either of these clear the framing error condition
flagSet[framing] = false;
flagset.reset(framing);
// this tests for the framing error condition
if (flagSet[framing])
{
// we have a framing error
}