[英]Adding values to a C++ enum
假設我在另一個我無法更改的庫中有以下代碼:
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 {
但別名永遠不會在 scope 中 - 我懷疑我必須改用普通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;
之前,有沒有人知道一個好的解決方案? ?
有點hacky,但這是我在處理作用域枚舉時想到的:
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;
我會因此被擊落,但為什么不直接使用宏呢?
#define PIN_SD_MOSI p0
#define PIN_SD_MISO p4
#define PIN_SD_SCK p2
#define PIN_SD_CSN p6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.