簡體   English   中英

如何將帶有“ any”枚舉的std :: map傳遞給函數

[英]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代碼處理,這對於將枚舉值作為intuint8_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));
}

Godbolt.org上的實時示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM