亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++:將枚舉值打印為文本

C ++:將枚舉值打印為文本

C++
Helenr 2019-09-21 15:17:15
如果我有這樣的枚舉enum Errors{ErrorA=0, ErrorB, ErrorC};然后我要打印到控制臺Errors anError = ErrorA;cout<<anError;/// 0 will be printed但是我想要的是文本“ ErrorA”,我可以不使用if / switch來做到嗎?您對此有什么解決方案?
查看完整描述

3 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

使用具有匹配值的字符串數組或向量:


char *ErrorTypes[] =

{

    "errorA",

    "errorB",

    "errorC"

};


cout << ErrorTypes[anError];

編輯:以上解決方案適用于枚舉是連續的,即從0開始且沒有分配的值。它將與問題中的枚舉完美配合。


要進一步證明枚舉不是從0開始的情況,請使用:


cout << ErrorTypes[anError - ErrorA];


查看完整回答
反對 回復 2019-09-21
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

這是一個基于Boost.Preprocessor的示例:


#include <iostream>


#include <boost/preprocessor/punctuation/comma.hpp>

#include <boost/preprocessor/control/iif.hpp>

#include <boost/preprocessor/comparison/equal.hpp>

#include <boost/preprocessor/stringize.hpp>

#include <boost/preprocessor/seq/for_each.hpp>

#include <boost/preprocessor/seq/size.hpp>

#include <boost/preprocessor/seq/seq.hpp>



#define DEFINE_ENUM(name, values)                               \

  enum name {                                                   \

    BOOST_PP_SEQ_FOR_EACH(DEFINE_ENUM_VALUE, , values)          \

  };                                                            \

  inline const char* format_##name(name val) {                  \

    switch (val) {                                              \

      BOOST_PP_SEQ_FOR_EACH(DEFINE_ENUM_FORMAT, , values)       \

    default:                                                    \

        return 0;                                               \

    }                                                           \

  }


#define DEFINE_ENUM_VALUE(r, data, elem)                        \

  BOOST_PP_SEQ_HEAD(elem)                                       \

  BOOST_PP_IIF(BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(elem), 2),      \

               = BOOST_PP_SEQ_TAIL(elem), )                     \

  BOOST_PP_COMMA()


#define DEFINE_ENUM_FORMAT(r, data, elem)             \

  case BOOST_PP_SEQ_HEAD(elem):                       \

  return BOOST_PP_STRINGIZE(BOOST_PP_SEQ_HEAD(elem));



DEFINE_ENUM(Errors,

            ((ErrorA)(0))

            ((ErrorB))

            ((ErrorC)))


int main() {

  std::cout << format_Errors(ErrorB) << std::endl;

}


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 784 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號