我有一个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/

10-09 12:32