使用c ++不使用映射表使用反射的方法将Enum转换为string输出
时间: 2024-02-05 14:10:36 浏览: 70
使用反射的方法将Enum转换为string需要用到C++的RTTI(Run-Time Type Information)特性。下面是一个示例代码:
```c++
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
// 定义一个枚举类型
enum Color {
RED,
GREEN,
BLUE
};
// 定义一个模板函数,将任意类型的枚举值转换为字符串
template<typename E>
string enumToString(E e) {
// 获取枚举类型的名称
const char* name = typeid(e).name();
// 在名称中查找最后一个空格的位置
const char* space = strrchr(name, ' ');
if (space) {
// 如果找到了空格,则将空格之后的部分作为枚举类型的名称
name = space + 1;
}
// 返回枚举类型的名称和枚举值的整数表示
return string(name) + "(" + to_string(static_cast<int>(e)) + ")";
}
int main() {
// 输出枚举值的字符串表示
cout << enumToString(RED) << endl; // 输出 "Color(0)"
cout << enumToString(GREEN) << endl; // 输出 "Color(1)"
cout << enumToString(BLUE) << endl; // 输出 "Color(2)"
return 0;
}
```
这个示例代码中,我们定义了一个枚举类型 `Color`,并且定义了一个模板函数 `enumToString`,它可以将任意类型的枚举值转换为字符串。在函数中,我们使用 `typeid` 获取枚举类型的名称,然后在名称中查找最后一个空格的位置,将空格之后的部分作为枚举类型的名称。最后,我们将枚举类型的名称和枚举值的整数表示拼接成一个字符串返回。
阅读全文