zoukankan      html  css  js  c++  java
  • 宏定义方式 进行枚举类型和枚举类型的相互转换

    很多时候我们会有这样的困扰:
    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;
    }
    
    
    
  • 相关阅读:
    Pearls POJ 1260 DP
    The Cow Lexicon DP
    矩形嵌套
    POJ 3061 Subsequence 尺取
    动物统计加强版 Trie 树
    codevs 1422 河城荷取
    cogs 944. [東方S3] 藤原妹红
    codevs 2830 蓬莱山辉夜
    cogs 998. [東方S2] 帕秋莉·诺蕾姬
    cogs 920. [東方S1] 琪露诺
  • 原文地址:https://www.cnblogs.com/Smarc/p/14951342.html
Copyright © 2011-2022 走看看