c++ - 如何打印 C++ 中相互依赖的枚举值的名称

标签 c++ enums stl

我们的平台代码将从第 3 方库获取回调,回调函数将接收两个参数。第一个参数是一个枚举 A 的一部分,它表示将作为第二个参数出现的可能枚举之一。例如,

enum a = {fruit, book, bike, car, sport, none}
enum f = {apple, mango, banana, none};
enum bo = {C, C++, Java, Python, none};
enum bi = {herohonda, lml, none};
enum c = {camry, carrola, altima, nissan, honda, none};
enum s = {cricket, tennis, volleyball, none};

回调中的第一个参数表示枚举 a 中的一个值。第二个参数取决于第一个参数。如果第一个参数是水果,第二个参数将是枚举 f 中的值之一。如果第一个参数是 book,第二个参数将是枚举 bo 中的值之一。

现在我们只是直接打印我们从回调中获得的值,因此这些值将是 1、0 或 2、1 之类的东西。但是通过查看数千个日志中的这些数字很难立即知道。我想打印名称而不是值。一种方法是对参数使用 if 条件,但效率不高。我打算使用 map 。但是我无法想到 map 中的第二个参数是什么。映射中的第一个参数(键)将代表回调中的第一个参数。如何在 map 中定义第二个参数(值)。它将是一个包含字符串(表示回调的第一个参数的字符串)和一个包含回调的第二个参数的映射的结构,字符串表示如下所示。

map <int second_parameter, string second_string> second;
struct map_struct
{
    string first_string;
    map <int, string> second;
};
map<int first_parameter, map_struct *stru> map;

这是正确的还是有任何其他有效的方法来打印名称而不仅仅是数字。

最佳答案

您可以创建一个查找表,最简单的形式可能是这样的:

std::string enums[5][6] = {
    {"apple",     "mango",   "banana",     "none"                    },
    {"C",         "C++",     "Java",       "Python", "none"          },
    {"herohonda", "lml",     "none"                                  },
    {"camry",     "carrola", "altima",     "nissan", "honda", "none" },
    {"cricket",   "tennis",  "volleyball", "none"                    }
};

关于c++ - 如何打印 C++ 中相互依赖的枚举值的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42751630/

相关文章:

c++ - QString 的替代品是什么?

android - Android 上基于枚举的单例的生命周期

java - Enum 在 android/java 中与 .setText 一起使用

swift - 在枚举中使用 int 作为 case

c++ - 如果 T 是 POD,std::array<T, S> 是否保证是 POD?

c++ - Open_GL 中的透视问题

c++ - OpenCV VideoCapture 部分帧损坏

循环队列中的c++模板特化

c++ - 对于后缀a++和前缀++a,如何以两种不同的方式重载operator++?

c++ - 是否有标准库函数可以反转 STL 堆栈?