枚举转字符串
#include
using namespace std;
enum gameDialogMessages_t {
GDM_INVALID,
GDM_SWAP_DISKS_TO1,
GDM_SWAP_DISKS_TO2,
GDM_SWAP_DISKS_TO3,
GDM_MAX
};
/**
* string填入的是枚举值,index是这个枚举对应的数值
* 这个宏主要用来把枚举转换成字符串。
* 将枚举转换成字符的操作来自#string。
* (1 / (int)!(string - index))主要是用来验证填入的枚举值和枚举对应的数值是否对应。
* 如果对应,string-index就等于0,!操作后就是1,1/1就是1。
* 如果不对应,(string - index)不论是正数还是负数,!后都是0,1/0就会引发一个除数为0的错误,导致程序崩溃。
*/
#define ASSERT_ENUM_STRING( string, index ) ( 1 / (int)!(string - index ) ) ? #string : ""
#define TO_STRING(string) #string
int main()
{
const char* dialogStateToString[GDM_MAX + 1] = {
ASSERT_ENUM_STRING(GDM_INVALID, 0),
ASSERT_ENUM_STRING(GDM_SWAP_DISKS_TO1, 1)
};
cout << dialogStateToString[0] << endl;
cout << TO_STRING(GDM_SWAP_DISKS_TO2) << endl;
cout << TO_STRING(GDM_SWAP_DISKS_TO3) << endl;
return 0;
}