如题例如
#define XXX 100有没有办法通过100得到XXX?而且是通过宏的方式,因为这些是一系列资源ID,而类名的命名规则是在资源ID前加"C"#define IDToClass(_X) C##_X 可以通过XXX来合成类的名字new IDToClass(XXX) 即可得到一个XXX的对象,问题是怎么能得到XXX ?在函数的参数里怎么能保留这些信息?或者怎么能通过宏的值逆推回宏?
#define XXX 100有没有办法通过100得到XXX?而且是通过宏的方式,因为这些是一系列资源ID,而类名的命名规则是在资源ID前加"C"#define IDToClass(_X) C##_X 可以通过XXX来合成类的名字new IDToClass(XXX) 即可得到一个XXX的对象,问题是怎么能得到XXX ?在函数的参数里怎么能保留这些信息?或者怎么能通过宏的值逆推回宏?
假设你定义 XXX 为100,也定义YYY为100,你现在给定100,结果到底是XXX还是YYY呢?
{
ID_1 = 0,
ID_2,
...
ID_NUM
}const char NAME[ID_NUM] = {...}; // 名字
const long VALUE[ID_NUM] = {...}; // 值
#define XXX 100
#define YYY 100
如果可以的话,那么该得出XXX还是YYY呢?
#define MAKE_MACS_DATA(_X) {_X, #_X}typedef struct _MAC_STRING
{
DWORD dwValue;
CHAR szMacString[1024];
}MAC_STRING;BOOL NMac::GetMacString_Error(int nError, _bstr_t *pbStrMac)
{
int i;
int nCount;
static MAC_STRING table[] =
{
MAKE_MACS_DATA(ERROR_SUCCESS),
MAKE_MACS_DATA(ERROR_INVALID_FUNCTION),
MAKE_MACS_DATA(ERROR_FILE_NOT_FOUND),
...
MAKE_MACS_DATA(ERROR_AUDITING_DISABLED),
MAKE_MACS_DATA(ERROR_ALL_SIDS_FILTERED)
}; nCount = sizeof(table) / sizeof(MAC_STRING); for(i=0; i<nCount; i++)
{
if(nError == table[i].dwValue)
{
*pbStrMac = table[i].szMacString;
return TRUE;
}
}
*pbStrMac = "";
return FALSE;}