宏定义方式 进行枚举类型和枚举类型的相互转换
很多时候我们会有这样的困扰:
1、如何在LOG中打印程序中的枚举类型
2、如何通过其他库内的枚举类型配置当前中的枚举类型
话不多说直接上代码:
1、枚举类型转字符串:
#include <iostream>
#include <string>
enum Type {
SC_TYPE1,
SC_TYPE2,
SC_TYPE3,
SC_TYPE4
};
std::string E2S(Type type) {
switch(type) {
#define E2STR(t) \
case Type::t: \
return #t;
E2STR(SC_TYPE1)
E2STR(SC_TYPE2)
E2STR(SC_TYPE3)
E2STR(SC_TYPE4)
#undef E2STR
default:
std::cout << "erro " << std::endl;
}
return "";
}
int main()
{
std::cout << E2S(Type::SC_TYPE1) << std::endl;
return 0;
}
很巧妙是吧, c++ 真的无所不能。。。。
2、枚举转枚举
同样的思路,直接上代码。
#include <iostream>
#include <string>
enum Type1 {
SC_TYPE1,
SC_TYPE2,
SC_TYPE3,
SC_TYPE4
};
enum Type2 {
CC_SC_TYPE1,
CC_SC_TYPE2,
CC_SC_TYPE3,
CC_SC_TYPE4,
CC_INVALID
};
Type2 E2E(Type1 type1) {
switch(type1) {
#define E2EE(t) \
case Type1::t: \
return CC_##t;
E2EE(SC_TYPE1)
E2EE(SC_TYPE2)
E2EE(SC_TYPE3)
E2EE(SC_TYPE4)
#undef E2EE
default:
std::cout << "erro " << std::endl;
}
return Type2::CC_INVALID;
}
int main()
{
std::cout << E2E(Type1::SC_TYPE2) << std::endl;
std::cout << "Hello world" << std::endl;
return 0;
}