assert_enum_string

枚举转字符串

#include 
using namespace std;

enum gameDialogMessages_t {
    GDM_INVALID,
    GDM_SWAP_DISKS_TO1,
    GDM_SWAP_DISKS_TO2,
    GDM_SWAP_DISKS_TO3,
    GDM_MAX // GDM_MAX + 1就表示枚举的长度
};
/**
 * 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;
}

你可能感兴趣的:(assert_enum_string)