繁体   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