gpt4 book ai didi

c++ - 方便的标志处理,其中所有标志都不能适应 64 位

转载 作者:行者123 更新时间:2023-11-28 01:41:34 28 4
gpt4 key购买 nike

我想用 C++ 创建一个方便的标志处理程序。

通常的想法是使用这样的东西:

enum class Flag {
Foo = 1<<0,
Bar = 1<<1,
Baz = 1<<2
};

// these operators can be generalized by using template functions with SFINAE
Flag operator|(Flag a, Flag b) {
return static_cast<Flag>(static_cast<underlying_type>(a)|static_cast<underlying_type>(b));
}
// add other operators here, like &, ^, |=, etc.

这行得通,但是我有两个问题:

  • Flag 的使用方式不一定是存储一个 标志,而是多个标志。这不是什么大问题,但我不认为这是好的设计,因为 Flag 现在实际上存储了一个未列为枚举成员的值。如果我将运算符的返回值更改为 underlying_type,那么我会丢失有关它存储 Flag
  • 标志的信息
  • 它无法扩展:如果我有超过 64 个标志,这个解决方案将不再有效

这个处理程序的进一步要求是不仅能够处理 1 位标志,而且能够处理几位宽的枚举(有了这些,很容易达到 64 位限制),我想控制位在处理程序之间的分配方式(我的意思是,例如,我想使用此处理程序来简化操作系统调用的处理,其中位位置由 API 确定)。

这个问题有什么(方便使用的、最佳的、通用的)解决方案?

最佳答案

只需使用 std::vector<bool>将标志存储为位(以这种方式实现)。如果位域的大小是固定的 - 使用 std::bitset .

关于c++ - 方便的标志处理,其中所有标志都不能适应 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909737/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com