我有一些位字段标志状态的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
}

08-05 07:18