限制枚举类的位数

时间:2019-07-18 21:18:41

标签: c++ c++14

在C ++ 14中,我想限制枚举类持有的位数:

enum class InstalledCapacity : uint8_t{
  None,
  One_1000uF,
  Two_1000uF,
  Three_1000uF,
  One_1F,
  One_3_3F,
  Reserved2,
  Invalid
};

using HarvestingCapability = uint8_t;

typedef struct {
  InstalledCapacity installed_capacity : 3;
  HarvestingCapability harversting_capability_x_15mW : 5;
}EnergyInfo;

这似乎不起作用,并且我收到以下警告:

eeprom_metadata.h:51:42: warning: '<anonymous struct>::installed_capacity' is too small to hold all values of 'enum class InstalledCapacity'
   InstalledCapacity installed_capacity : 3;
                                          ^

由于我的InstalledCapacity枚举类中只有7个值,因此我希望只能使用3个位。

我在做什么错,这甚至可能吗?提前非常感谢!

1 个答案:

答案 0 :(得分:2)

没错,编译器只是在说3位太小而无法容纳枚举的所有可能值,该值可能多达8位。仅仅因为您所有的命名枚举值都可以容纳3位,并不意味着InstalledCapacity的所有可能值都可以容纳到位集中。 255的值对枚举是完全有效的,但不能放入您的位集中。