enum 枚举 字符串 转换 在调试时 写log时方便查找

来源:互联网 发布:微信淘宝优惠券可靠吗 编辑:程序博客网 时间:2024/05/16 11:22

msg.inl:

// 测试起始值MSGDEFINE_VAL(CMD_TEST_START,0)// A类消息起始值MSGDEFINE_VAL(CMD_TEST_A_BEGIN,CMD_TEST_START)// A类第一个测试消息MSGDEFINE(CMD_TEST_A_1)// A类第二个测试消息MSGDEFINE(CMD_TEST_A_2)// A类测试消息结束MSGDEFINE(CMD_TEST_A_END)

define.inl

#ifdef __MSGCMD_DEFINE#define MSGDEFINE(msg) msg,#define MSGDEFINE_VAL(msg,default_value) msg = default_value,#else#define MSGDEFINE(msg) ms[MsgCmd::msg] = string(#msg);#define MSGDEFINE_VAL(msg,default_value) ms[MsgCmd::msg] = string(#msg);#endif

protocol.h

#pragma once#include <map>#include<string>using std::map;using std::string;class MsgCmd{public:enum E{#ifdef __MSGCMD_DEFINE#undef __MSGCMD_DEFINE#endif#define __MSGCMD_DEFINE#include "define.inl"#include "msg.inl"#undef __MSGCMD_DEFINE};};class MsgCmd_String{map<int,string> ms;public:MsgCmd_String(){#ifdef __MSGCMD_DEFINE#undef __MSGCMD_DEFINE#endif#include "define.inl"#include "msg.inl"}public:string toString(int cmd){auto itr = ms.find(cmd);if (itr == ms.end()){return "";}return itr->second;}};

main.cpp

#include "protocol.h"#include<iostream>using std::cout;using std::endl;int main(){int iTestA1 = MsgCmd::CMD_TEST_A_1;MsgCmd_String cmdString;string strTmp = cmdString.toString(iTestA1);cout<<strTmp<<endl;return 0;}

0 0