向C++枚举添加值

mcdcgff0  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(179)

假设我有下面的代码 * 在另一个库中,我不能改变 *:

typedef enum {
    p0  = 0,
    p1  = 1,
    p2  = 2,
    p3  = 3,
    p4  = 4,
    p5  = 5,
    p6  = 6,
    ...
} PinName;

我想添加一些额外的别名,如下所示(* 不使用const PinName PIN_... *):

enum class : PinName {
    PIN_SD_MOSI = p0,
    PIN_SD_MISO = p4,
    PIN_SD_SCK = p2,
    PIN_SD_CSN = p6,
};

但它不起作用。我得到以下错误:

error: underlying type 'PinName' of '<anonymous enum class>' must be an integral type
  enum class : PinName {
               ^

我也试过使用enum class : int {,但是别名从来不在作用域中--我怀疑我必须使用普通的enum来代替。enum : int编译,但是你不能将任何别名传递给接受PinName的函数。

error: no matching function for call to 'foo(<anonymous enum>, <anonymous enum>)'
 foo(PIN_SD_MISO, PIN_SD_MOSI);
     ^

(候选值为foo(PinName, PinName)。)
在我给予使用const PinName PIN_SD_MISO = p2;之前,有人想到一个好的解决方案吗?

aurhwmvo

aurhwmvo1#

这是我在处理作用域枚举时得出的结果,有点笨拙:

enum class OriginalType {
   FOO,  // 0
   BAR   // 1
   END   // 2
};

enum class ExtendOriginalType : std::underlying_type_t<OriginalType> {
   EXTENDED_FOO = static_cast<std::underlying_type_t<OriginalType>>
                                           (OriginalType::END), // 2
   EXTENDED_BAR  // 3
};

然后像这样使用:

OriginalType myOriginalType = (OriginalType)ExtendOriginalType::EXTENDED_BAR;

从Base枚举类继承

dced5bon

dced5bon2#

我会被击落,但为什么不只是使用宏?

#define PIN_SD_MOSI  p0
#define PIN_SD_MISO  p4
#define PIN_SD_SCK   p2
#define PIN_SD_CSN   p6

相关问题