如何将带有“任何”枚举的std :: map传递给函数

时间:2019-08-09 12:52:42

标签: c++

我有很多枚举声明,例如

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函数都需要编译而炸裂了已编译的代码(该函数将在一个更大的类中,因此我需要对整个类进行模板化。)

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用功能模板来接受任何值类型为std::map的{​​{1}}:

const char*

live example on godbolt.org