我有一个C++错误代码枚举(其中有30个),并且有一个函数在出现问题时返回错误代码。有没有一种方法可以解析枚举,以便检查返回了哪些错误代码并提供解释?我知道在这里可以使用switch语句,但是正在寻找与众不同的方法,以避免编写大量switch语句。
最佳答案
不,这是不可能的:枚举常量的名称是编译时 Artifact ,它们在运行时不可用*。
您可以创建一个map<string,MyEnumType>
并用枚举的名称及其值填充它。您可以使用“字符串化宏”来避免多次键入相同的值:
#include <iostream>
#include <string>
#include <map>
using namespace std;
#define ADD_ENUM_TO_MAP(m,x) m[#x]=x
enum MyEnumType {
quick, brown, fox, jumps, over, the, lazy, dog
};
int main() {
map<string,MyEnumType> nameToEnum;
ADD_ENUM_TO_MAP(nameToEnum, quick);
ADD_ENUM_TO_MAP(nameToEnum, brown);
ADD_ENUM_TO_MAP(nameToEnum, fox);
ADD_ENUM_TO_MAP(nameToEnum, jumps);
ADD_ENUM_TO_MAP(nameToEnum, over);
ADD_ENUM_TO_MAP(nameToEnum, the);
ADD_ENUM_TO_MAP(nameToEnum, lazy);
ADD_ENUM_TO_MAP(nameToEnum, dog);
cout << nameToEnum["fox"] << endl;
return 0;
}
Demo.
*调试器通过编译器提供的符号表获取此信息。
关于c++ - 如何解析C++中的枚举?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27459117/