[英]How to pass an std::map with “any” enum to a function
我有很多枚舉聲明,例如
typedef enum {
E_FOO_1,
E_FOO_RANDOM,
E_FOO_25,
} E_FOO;
typedef enum {
E_BAR_RANDOM,
E_BAR_SOMETHING,
E_BAR_WHATEVER,
} E_BAR;
我需要一個映射到字符串
std::map<E_FOO, const char*> fooMap = {
{E_FOO_1, "completly different string"},
{E_FOO_RANDOM, "hi"},
{E_FOO_25, "down"},
};
std::map<E_BAR, const char*> barMap = {
{E_BAR_RANDOM, "1234"},
{E_BAR_SOMETHING, "3},
{E_BAR_WHATEVER, "45"},
};
無論如何,有沒有寫一個函數來接受類似(uint8_t someEnumValue, std::map<any, const char*>)
並簡單地返回字符串?
在實際應用中,結構要復雜得多,並且enums
由某些C代碼處理,這對於將枚舉值作為int
或uint8_t
進行處理沒有問題,但是我不太習慣C ++,所以我看不到任何傳遞方法這些參數成為一般功能。
可以通過使用模板來完成嗎? 而且這不會破壞已編譯的代碼,因為對於每個enum
,都需要編譯函數(該函數將在更大的類中,因此我需要對整個類進行模板化)。
謝謝!
您可以使用函數模板接受任何類型為const char*
std::map
:
template <typename Enum>
const char* get_string(std::uint8_t v, const std::map<Enum, const char*>& m)
{
return m.at(static_cast<Enum>(v));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.