宏定义方式 进行枚举类型和枚举类型的相互转换

Posted Smarc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宏定义方式 进行枚举类型和枚举类型的相互转换相关的知识,希望对你有一定的参考价值。

很多时候我们会有这样的困扰:
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;
}


以上是关于宏定义方式 进行枚举类型和枚举类型的相互转换的主要内容,如果未能解决你的问题,请参考以下文章

python 有宏定义,或者枚举么

C 语言使用宏自定义可打印的枚举(enum) 类型

C 语言使用宏自定义可打印的枚举(enum) 类型

C语言数组或者枚举类型初始化时出现宏定义和包含头文件的奇怪语法

C语言数组或者枚举类型初始化时出现宏定义和包含头文件的奇怪语法

C语言数组或者枚举类型初始化时出现宏定义和包含头文件的奇怪语法